2013-10-16 110 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。

相關問題