Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Ionic ZipFile是否锁定/解锁文件?_C#_File Locking - Fatal编程技术网

C# Ionic ZipFile是否锁定/解锁文件?

C# Ionic ZipFile是否锁定/解锁文件?,c#,file-locking,C#,File Locking,我正忙于为现有的C#(4.0)应用程序开发一个附加模块,该应用程序使用Ionic Zip库来管理数据。在我的模块中,我需要从zip文件加载数据,对它们进行操作,然后再次写回。我的例程在单元测试中运行正常,但是当从主机应用程序中调用时,它抛出一个异常,读取“进程无法访问该文件,因为它正被另一个进程使用”。这发生在我尝试调用Zip存档的Save()函数时 我检查了哪个进程实际上锁定了文件,它恰好是应用程序本身。因此,我得出结论,主机程序可能会受到某种干扰:例如,文件流在某个位置打开,但没有关闭。(顺

我正忙于为现有的C#(4.0)应用程序开发一个附加模块,该应用程序使用Ionic Zip库来管理数据。在我的模块中,我需要从zip文件加载数据,对它们进行操作,然后再次写回。我的例程在单元测试中运行正常,但是当从主机应用程序中调用时,它抛出一个异常,读取“进程无法访问该文件,因为它正被另一个进程使用”。这发生在我尝试调用Zip存档的
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(例如)-我必须使用这个。