2013-10-16 28 views
26

Basic-Code verwendet wird:C# ZipFile.CreateFromDirectory - der Prozess kann nicht die Datei "path_to_the_zip_file_created.zip" zugreifen, da sie von einem anderen Prozess

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.

Die obige Setup funktioniert auf Windows 7 in Ordnung, wo ich Visual Studio muss installiert sein, aber beim Ausführen unter Windows Server 2008 R2 wird die obige Fehlermeldung angezeigt.

Ich habe die Antivirus-Logs überprüft und es blockiert weder die Anwendung, noch sperrt es die erstellte Zip-Datei.

+0

Haben Sie jemals das Problem herausgefunden? –

+1

Genau das passiert mir. –

+0

Die ZIP-Datei versucht, den gesamten Inhalt des Ordners zu komprimieren, wird aber beim Lesen des Ordners geschrieben. Dadurch versucht es, sich selbst zu zippen. Die folgenden Antworten zeigen, dass Sie die ZIP-Datei nicht in dem Ordner speichern müssen, den Sie zippen. –

Antwort

7

Ich hatte genau das gleiche Problem. Die Problemumgehung besteht darin, den zu ziehenden Ordner in einen anderen Ordner zu kopieren und auf CreateFromDirectory zu verweisen. Frag mich nicht, warum das funktioniert, aber es tut es.

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

Sie könnten auch versuchen _ nicht die ZIP-Datei in das Verzeichnis zu schreiben, das gezippt wird_. – CodeCaster

+1

Yuo genius @CodeCaster .. mich albern versuchen, Datei in den gleichen Ordner zu zippen! –

+1

Für mich ist diese Antwort korrekt, wenn Sie versuchen, eine Site zu sichern. Die einzigen Dateien, die vom Prozess gesperrt werden, sind die Log-Dateien (danke, Log4Net!), Die mir bei Backups egal sind. –

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

Ich verwende den gleichen Fehler zu tun: eine Datei in denselben Ordner zippen, die ich zippen.
Dies verursacht natürlich einen Fehler.

4

Die anderen Antworten, liefern den richtigen Grund, aber ich hatte ein kleines Problem, sie auf den ersten Blick zu verstehen. Ich kann nichts sagen, also stelle das als Antwort dar. Könnte leicht für jemanden sein, der dies später besucht.

Wenn der Pfad der ZIP-Datei, die erstellt wird, dem Pfad des ZipFile.CreateFromDirectory entspricht, erstellt ZipFile die gewünschte ZIP-Datei und beginnt mit dem Hinzufügen der Dateien aus dem Verzeichnis. Und wird schließlich versuchen, die gewünschte Zip-Datei in der Zip-Datei hinzuzufügen, da sie sich im selben Verzeichnis befindet. Dies ist einfach nicht möglich und nicht erforderlich, da die gewünschte ZIP-Datei von der CreateFromDirectory-Methode verwendet wird.

Verwandte Themen