2

SharpZipLib のクラス FastZip を使用して zip ファイルを作成していますが、プログラムを閉じた後、次の理由でファイルを削除できません。

「zip.zip を削除できません: 別の人またはプログラムによって使用されています。ファイルを使用している可能性のあるプログラムをすべて閉じて、もう一度やり直してください。」

ファイルを生成するコードは次のとおりです。

fZip.CreateEmptyDirectories = true;
fZip.CreateZip(filesPath + "\\" + this.zipName, filesPath, false, this.zipFilter);

私は使用してみました:

            using (FastZip fZip = new FastZip())
            {
                try
                {
                    fZip.CreateEmptyDirectories = true;
                    fZip.CreateZip(filesPath + "\\" + this.zipName, filesPath, false, this.zipFilter);
                }
                catch (Exception)
                {
                }
            }

ただし、iDisposable には変換されません。

4

5 に答える 5

3

SharpZipLibのバグのようです。FastZip.CreateZipメソッドには3つのオーバーロードがあり、そのうちの2つは次のようなFile.Createを使用して作成します。

CreateZip(File.Create(zipFileName), // ...

ストリームが閉じないようですので、以下を使用した方がよい場合があります。

string zipFileName = System.IO.Path.Combine(filesPath, this.zipName);
using (Stream stream = File.Create(zipFileName))
{
    fZip.CreateZip(stream, filesPath, false, this.zipFilter, null);
    stream.Close();
}

技術的には、usingブロックでCloseを呼び出す必要はありませんが、明示的に指定したいと思います。

于 2008-12-04T23:43:43.297 に答える
2

私は実際にこの問題を自分で解決しました。SharpZipLib/FastZip ではないことが判明しました。私は System.Net.Mail 経由で電子メールを送信していて、FastZipped ファイルをその電子メールの添付ファイルとして添付していました。添付ファイルを削除しようとしたところ、あなたが受け取ったエラーに遭遇しました。私がしなければならなかったのは、メールを送信した後に MailMessage.Dispose() を呼び出すことだけでした。

ファイルのロックを保持している可能性のあるコード内の他の項目を調べてください。可能であれば、それらのアイテムを dispose() または close() してみてください。

于 2011-09-15T15:34:20.443 に答える
1

ウイルス対策がファイルのチェックでビジー状態になっている可能性がありますか? そうでない場合は、どのプログラムがファイルを開いているかを教えてくれるプログラムを入手してください。

あなたは見ることができます:

于 2008-12-04T11:37:02.827 に答える
0

私はFastZipAPIに精通していません(したがって、これは単なるパントです)が、fZip.Close()のようなものでアーカイブを閉じる必要がありますか?

私は、プログラムを閉じることは同じことをしただろうと思っていたでしょうが、ただの推測です。

于 2008-12-04T12:08:41.483 に答える
0

終了したらSharpZipLibストリームを必ず CLOSE してください。これは、「using」ステートメント内にその構築をラップすることで実行できます...

using(Stream s = new SharpZipLibStream())
{
   /*...do stuff, zip stuff.../
}
于 2008-12-04T12:19:21.073 に答える