C# Ionic ZipFile是否锁定/解锁文件?
我正忙于为现有的C#(4.0)应用程序开发一个附加模块,该应用程序使用Ionic Zip库来管理数据。在我的模块中,我需要从zip文件加载数据,对它们进行操作,然后再次写回。我的例程在单元测试中运行正常,但是当从主机应用程序中调用时,它抛出一个异常,读取“进程无法访问该文件,因为它正被另一个进程使用”。这发生在我尝试调用Zip存档的C# Ionic ZipFile是否锁定/解锁文件?,c#,file-locking,C#,File Locking,我正忙于为现有的C#(4.0)应用程序开发一个附加模块,该应用程序使用Ionic Zip库来管理数据。在我的模块中,我需要从zip文件加载数据,对它们进行操作,然后再次写回。我的例程在单元测试中运行正常,但是当从主机应用程序中调用时,它抛出一个异常,读取“进程无法访问该文件,因为它正被另一个进程使用”。这发生在我尝试调用Zip存档的Save()函数时 我检查了哪个进程实际上锁定了文件,它恰好是应用程序本身。因此,我得出结论,主机程序可能会受到某种干扰:例如,文件流在某个位置打开,但没有关闭。(顺
Save()
函数时
我检查了哪个进程实际上锁定了文件,它恰好是应用程序本身。因此,我得出结论,主机程序可能会受到某种干扰:例如,文件流在某个位置打开,但没有关闭。(顺便问一下,有没有一些聪明的方法来照顾这些地方?)
让我困惑的是,在处理文件时,Ionic的ZipFile是否真的锁定/解锁文件,如以下代码段所示:
ZipFile zf = new ZipFile("test01.zip");
zf.Save();
// FileSystemTools.WhoIsLocking is a utility showing a list pf processes
// holding access to a given file
// Similar to http://stackoverflow.com/questions/1304/how-to-check-for-file-lock/20623302#20623302
List<Process> processes = FileSystemTools.WhoIsLocking("test01.zip");
Assert.That(processes.Count == 1);
zf.Dispose();
processes = FileSystemTools.WhoIsLocking("test01.zip");
Assert.That(processes.Count == 0);
ZipFile zf=新ZipFile(“test01.zip”);
zf.Save();
//FileSystemTools.WhoIsLocking是一个显示进程列表的实用工具
//保持对给定文件的访问权限
//近似http://stackoverflow.com/questions/1304/how-to-check-for-file-lock/20623302#20623302
List processs=FileSystemTools.WhoIsLocking(“test01.zip”);
Assert.That(processs.Count==1);
zf.Dispose();
processs=FileSystemTools.WhoIsLocking(“test01.zip”);
Assert.That(processs.Count==0);
在
Save()
之后,锁定进程的数量是1(正在运行的进程本身),但在Dispose()
之后,没有锁定进程,这证明了Ionic.ZipFile显然在内部保存了一些文件流,并以某种方式管理它们。但是,在其他地方,Dispose()
没有效果:锁定进程的数量不会减少。标志性的.Zip文档非常稀少,而且很有趣。您确定此ZipFile
来自.Net framework吗?它似乎是一个静态类:另外:您可能必须.close()
ZipFile!Dispose Normally也会关闭它。嗨,Alex H,你提到的是System.IO.Compression中的ZipFile,而我指的是Ionic.Zip.ZipFile(例如)-我必须使用这个。