2013-10-16 70 views
26

Basic代码:C#ZipFile.CreateFromDirectory - 该进程无法访问文件“path_to_the_zip_file_created.zip”,因为它正被另一个进程使用

string startPath = @"C:\intel\logs"; 
string zipPath = @"C:\intel\logs-" + DateTime.Now.ToString("yyyy_dd_M-HH_mm_ss") + ".zip"; 
ZipFile.CreateFromDirectory(startPath, zipPath); 

Error: the process cannot access the file "path_to_the_zip_file_created.zip" because it is being used by another process.

上面的设置工作正常的Windows 7,我安装了Visual Studio,但在Windows Server 2008R2上运行时遇到以上错误消息。

我检查了防病毒日志,它不会阻止应用程序,也不会锁定创建的zip文件。

+0

你有没有想过这个问题? –

+1

这正是我正在发生的事情。 –

+0

压缩文件试图压缩文件夹的所有内容,但仍在读取该文件夹时被写入。这导致它尝试压缩自身。下面的答案表明您不能将压缩文件存储在要压缩的文件夹中。 –

回答

7

我有完全相同的问题。解决方法是将要压缩的文件夹复制到另一个文件夹,并指向CreateFromDirectory。不要问我为什么这个工作,但它确实。

Directory.CreateDirectory(<new directory path>); 
File.Copy(<copy contents into new folder>); 
ZipFile.CreateFromDirectory(<new folder path>, <zipPath>); 
+8

你也可以尝试_not不要将zipfile写入zipped_目录。 – CodeCaster

+1

Yuo genius @CodeCaster ..我很傻,想把文件压缩到同一个文件夹! –

+1

对我而言,尝试备份网站时,此答案是正确的。唯一被进程锁定的文件是日志文件(感谢,Log4Net!),我不关心备份。 –

51
//WRONG 
ZipFile.CreateFromDirectory("C:\somefolder", "C:\somefolder\somefile.zip"); 
//RIGHT  
ZipFile.CreateFromDirectory("C:\somefolder", "C:\someotherfolder\somefile.zip"); 

我用做了同样的错误:荏苒文件到我正在荏苒同一文件夹中。
这会导致错误,当然。

4

其他答案,提供了正确的理由,但我在第一眼就了解它们时有点问题。我无法发表评论,所以把它作为答案。对于稍后访问此人的人可能很容易。

如果正在创建的Zip文件的路径与给予ZipFile.CreateFromDirectory的路径相同,ZipFile会创建所需的zip文件并开始将文件从目录添加到该文件。最后,也会尝试在zip中添加所需的zip文件,因为它位于相同的目录中。这是不可能的,也不是必需的,因为CreateFromDirectory方法正在使用所需的zipfile。

相关问题