2013-10-16 11 views
26

Basicのコード別のプロセスによって使用されているため、プロセスはファイル「path_to_the_zip_file_created.zip」にアクセスすることはできません。C#のZipFile.CreateFromDirectory - それは

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のIに正常に動作しますVisual Studioがインストールされているが、Windows Server 2008 R2で実行しているときに上記のエラーメッセージが表示される。

私はウイルス対策ログをチェックしており、アプリケーションをブロックしたり、作成されたzipファイルをロックしたりしません。

+0

問題を解消しましたか? –

+1

これはまさに私に起こっていることです。 –

+0

zipファイルは、フォルダのすべての内容を圧縮しようとしていますが、フォルダを読み込んでいる間に書き込まれます。これは、それ自体を解凍しようとします。以下の答えは、あなたが圧縮しているフォルダ内にzipファイルを保存してはならないことを示しています。 –

答えて

7

私はまったく同じ問題を抱えていました。この問題を回避するには、圧縮しているフォルダを別のフォルダにコピーし、そこでCreateFromDirectoryをポイントします。なぜこの作品が動作するのか聞かないでください。 私はをビュンよ同じフォルダにファイルをビュン:私は同じエラーを行うために使用

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

また、zipファイルを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ファイルを追加しようとします。目的のzipファイルがCreateFromDirectoryメソッドで使用されているため、これは不可能で必須ではありません。