我在各种档案中运行sevenzipsharp,如果通过我的测试,我想将档案移动到另一个文件夹中。但是我得到一个例外,说文件正在被进程使用。我无法在Windows资源管理器中移动它,但是当我杀死我的应用程序进程时,我可以移动它。我怀疑sevenzipsharp锁定了文件,所以我无法移动它。
我写using (var extractor= new SevenZipExtractor(fn)) {
。我尝试将文件移动到使用块之外但仍然没有去。似乎在我运行此方法几次后,我可以移动第一个存档但是我将无法移动最后一个存档
如何制作,以便没有进程正在使用该文件,以便我可以将存档移动到文件夹?
答案 0 :(得分:1)
我可以使用以下代码完成此工作(即使使用无效的存档):
try
{
extractor.ExtractArchive(tempFolder);
}
finally
{
extractor.Dispose();
GC.Collect();
GC.WaitForPendingFinalizers();
Directory.Delete(tempFolder, true);
}
答案 1 :(得分:0)
只需处置()这个对象,不要使用(....)我不知道为什么(!)但这个方法对我有用。
但如果存档无效,它将保持锁定状态...... 有什么建议吗?
更新: 有一个更好的办法。您可以为您的文件创建一个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();