为什么Lucene.Net索引器抛出未处理的System.IO.IOException?有时会抛出一个异常,说文件write.lock不能使用,因为它被另一个进程使用,但这是一个非常简单的Lucene.Net测试应用程序,没有其他进程使用它,知道异常可能如下所示:System.IO.IOException未处理HResult=-2147024864Message=进程无法访问文件“c:templuceneidxwrite.lock”,因为它正被另一个进程使用。Source=mscorlibStackTrace:在System.IO.__Error.WinIOError(Int32errorCode,StringmaybeFullPath)在System.IO.File.InternalDelete(Stringpath,BooleancheckHost)在System.IO.File.Delete(Stringpath)在Lucene。C:\Lucene.TestLuceneSearchResumes中的Test.LuceneSearchInternal.get__directory()。cs:line35抛出异常的相关代码是,varlockFilePath=Path.Combine(_luceneDir,"write.lock");如果(File.Exists(lockFilePath))File.Delete(lockFilePath);//THROWSexceptionsometimescode主要来自这篇文章。该索引是使用Task.Factory.StartNew()在后台线程上构建的,并且在构建索引时WPFGUI会进行搜索。只有一个线程将文档写入索引。问题:还有哪个进程正在使用Lucene.Net索引?假设提供的代码与搜索过程(而不是索引过程)相关,它不应在每次尝试访问索引时都尝试删除锁定文件。抛出异常是因为后台线程当前正在写入索引,而当线程本身应该处理删除时,您正试图删除它的锁定文件。在您的帖子中,此机制用于在系统/应用程序崩溃后通过锁定写入索引时恢复Lucene索引。然而,这并不常见。我相信它采用的方法是在CodeProject文章中采用的,假设它是对索引的单线程访问。在您的项目中,您需要能够检查锁定文件的存在是由于当前的写入访问还是由于先前的应用程序/系统崩溃。您可以在代码中使用锁定对象,以便在发生崩溃时动态释放以区分这两种情况。以上是C#学习教程:WhydoestheLucene.NetindexerthrowSystem.IO.IOExceptionunhandled?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
