1

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

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

我该如何做到这一点,所以没有进程正在使用该文件,所以我可以将存档移动到文件夹中?

4

2 回答 2

1

我可以使用以下代码完成这项工作(即使存档无效):

try 
{
    extractor.ExtractArchive(tempFolder);
}
finally
{
    extractor.Dispose();
    GC.Collect();
    GC.WaitForPendingFinalizers();
    Directory.Delete(tempFolder, true);
}
于 2017-04-25T16:26:11.420 回答
0

只需 dispose() 这个对象,不要使用 using(....) 我不知道为什么(!),但这个方法对我有用。

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

更新:有更好的方法。您可以为您的文件创建一个 Stream 并在代码末尾关闭()它。

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();
于 2012-05-31T18:23:17.803 回答