How do I find out what 'processes' are accessing my Lucene.Net file?
-
05-07-2019 - |
Question
I'm getting this exception when running some code to add text to a Lucene.net index:
The process cannot access the file 'E:\SomeProject\SomeProject.Webroot\App_Data\Lucene\segments.new' because it is being used by another process.
What's the easiest way of finding out what the 'other process' is? (I'm running on Win XP) Here's a stripped down code fragment (the exception is being thrown by the 'AddDocument' line after 50+ iterations) in case that's any help:
using l = Lucene.Net;
public void IndexText(List<TextToIndex> textToIndexList)
{
l.Analysis.Standard.StandardAnalyzer standardAnalyzer =
new l.Analysis.Standard.StandardAnalyzer();
l.Index.IndexWriter indexWriter =
new l.Index.IndexWriter(_LuceneIndexPath, standardAnalyzer, false);
foreach (TextToIndex textToIndex in textToIndexList)
{
l.Documents.Document luceneDoc =
CreateLuceneDoc(textToIndex.TypeId,
textToIndex.TextId,
textToIndex.Text,
textToIndex.Title,
textToIndex.ModifiedDate,
textToIndex.CultureCode);
indexWriter.AddDocument(luceneDoc);
}
indexWriter.Close();
}
Solution
You can use sysinternal's (now part of Microsoft) "process explorer" to find out what processes have what files open:
http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
When you run it, click on the "find handle" button (or from the menu find->find handle), then enter "segments.new" - it will show you any processes that have that file open.
OTHER TIPS
Try "unlocker" http://www.emptyloop.com/unlocker/