Ionic ZipFile会锁定/解锁文件吗?

时间:2016-01-14 10:00:20

标签: c# file-locking

我正在为现有的C#(4.0)应用程序开发一个额外的模块,该应用程序使用Ionic Zip库来管理数据。在我的模块中,我需要从zip文件加载数据,操作它们,然后再写回来。我的例程在单元测试中运行正常,但是当从主机应用程序中调用时,它会抛出异常读取“进程无法访问该文件,因为它正被另一个进程使用”。当我尝试调用Zip存档的Save()函数时,会发生这种情况。

我检查了哪个进程实际锁定了文件,它恰好是应用程序本身。因此,我得出结论,主机程序可能存在某种干扰:例如:在某个地方打开但未关闭的文件流。 (顺便说一句,是否有一些聪明的技术来照顾这些地方?)

令我困惑的是,在处理文件时,这些ZipFile的Ionic是否真的锁定/解锁文件,如下面的代码片段所示:

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);

Save()锁定进程的数量为1(正在运行的进程本身),但在Dispose()之后没有,这证明了Ionic.ZipFile显然在内部保存了一些文件流并以某种方式管理它们。但是,在其他地方,Dispose()没有效果:锁定过程的数量不会减少。 Iconic.Zip文档很少且难以置信。

0 个答案:

没有答案