.net sevenzipsharp文件锁。我能';你不能移动文件吗?

.net sevenzipsharp文件锁。我能';你不能移动文件吗?,.net,sevenzipsharp,.net,Sevenzipsharp,我正在各种档案上运行sevenzipsharp,如果它通过了我的测试,我想将档案移到另一个文件夹中。但是,我得到一个异常,表示该文件正由进程使用。我也不能在windows资源管理器中移动它,但是当我关闭应用程序进程时,我可以移动它。我怀疑sevenzipsharp锁定了文件,所以我无法移动它 我使用(var extractor=new SevenZipExtractor(fn)){编写。我尝试将文件移到using块之外,但仍然没有成功。似乎在我运行此方法几次后,我可以移动第一个存档,但无法移动最

我正在各种档案上运行sevenzipsharp,如果它通过了我的测试,我想将档案移到另一个文件夹中。但是,我得到一个异常,表示该文件正由进程使用。我也不能在windows资源管理器中移动它,但是当我关闭应用程序进程时,我可以移动它。我怀疑sevenzipsharp锁定了文件,所以我无法移动它

我使用(var extractor=new SevenZipExtractor(fn)){编写
。我尝试将文件移到using块之外,但仍然没有成功。似乎在我运行此方法几次后,我可以移动第一个存档,但无法移动最后一个存档

我如何使它不被进程使用,这样我就可以将归档文件移动到文件夹中?

只需处置()这个对象,不要使用(…)我不知道为什么(!)但是这个方法对我有效

但如果存档无效,它将保持锁定状态。。。 有什么建议吗

更新: 还有一个更好的方法,你可以为你的文件创建一个流,并在代码结束时关闭它

Stream reader=new FileStream(filename, FileMode.Open);//You can change Open mode to OpenOrCreate
sevenZipExtractor extactor= new SevenZipExtractor((Stream)reader);

//Your code here.....

reader.Close();
extactor.Dispose();
我不知道为什么(!)但是这个方法对我有效

但如果存档无效,它将保持锁定状态。。。 有什么建议吗

更新: 还有一个更好的方法,你可以为你的文件创建一个流,并在代码结束时关闭它

Stream reader=new FileStream(filename, FileMode.Open);//You can change Open mode to OpenOrCreate
sevenZipExtractor extactor= new SevenZipExtractor((Stream)reader);

//Your code here.....

reader.Close();
extactor.Dispose();
我可以使用以下代码完成此工作(即使使用无效的归档):

try 
{
    extractor.ExtractArchive(tempFolder);
}
finally
{
    extractor.Dispose();
    GC.Collect();
    GC.WaitForPendingFinalizers();
    Directory.Delete(tempFolder, true);
}
我可以使用以下代码完成此工作(即使使用无效的归档):

try 
{
    extractor.ExtractArchive(tempFolder);
}
finally
{
    extractor.Dispose();
    GC.Collect();
    GC.WaitForPendingFinalizers();
    Directory.Delete(tempFolder, true);
}

这就是开源的好处,你可以自己修复bug。如果你想让作者这么做,就使用项目的问题跟踪程序。我怀疑他会想要一个重新编写的项目,这是一个相当合理的期望。这就是开源的好处,你可以自己修复bug。如果你想让作者这么做,就使用项目的问题跟踪程序。我相信pect他会想要一个repo项目,这是一个相当合理的期望。我对这个解决方案不感兴趣,因为GC.Collect()不是一个昂贵的方法,因为它可以在整个.NET运行时工作吗?但是,它是一个有效的解决方法。在上有一个问题记录在案(请参阅“不正确处理,保留文件使用”)作者说他会在2009年修复它,而项目#3743在2013年关闭,但我今年拿到了发行版,它仍然存在问题。我使用的是从NuGet获得的SevenZipSharp.dll v0.64.3890.29348。我对这个解决方案不感兴趣,因为它不是GC.Collect()这是一种昂贵的方法,因为它可以在整个.NET运行时运行?但是,它是一种有效的解决方法。在中记录了一个有关此问题的问题(请参阅“未正确处理,将文件保留在使用中”)作者说他会在2009年修复它,该项目#3743于2013年关闭,但我今年拿到了发行版,它仍然存在问题。我使用的是从NuGet获得的SevenZipSharp.dll v0.64.3890.29348。