Как узнать, какие «процессы» обращаются к моему файлу Lucene.Net? - PullRequest
0 голосов
/ 30 июля 2009

Я получаю это исключение при запуске некоторого кода для добавления текста в индекс Lucene.net:

Процесс не может получить доступ к файлу 'E: \ SomeProject \ SomeProject.Webroot \ App_Data \ Lucene \ segments.new' потому что он используется другим процесс.

Какой самый простой способ узнать, что такое «другой процесс»? (Я работаю на Win XP) Вот фрагмент кода, зарезанный (исключение выдается строкой 'AddDocument' после 50+ итераций) на случай, если это поможет:

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();
}

Ответы [ 2 ]

2 голосов
/ 30 июля 2009

Вы можете использовать sysinternal's (теперь часть Microsoft) «Process Explorer», чтобы узнать, какие процессы открывают какие файлы:

http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

Когда вы запустите его, нажмите кнопку «найти дескриптор» (или в меню найти-> найти дескриптор), затем введите «сегменты.новый» - он покажет вам все процессы, у которых этот файл открыт.

1 голос
/ 30 июля 2009

Попробуйте "unlocker" http://www.emptyloop.com/unlocker/

...