DotNetZip がファイルで車輪を回転させる理由について説明できる人はいますか? 私はこのファイルを持っていますが、これは著作権で保護されていて配布できず、zip 形式ではありません。ファイルの以前のバージョンまたはそれ以降のバージョンを使用できますが、正常に圧縮されます。
zip ユーティリティはバージョンを気にするべきではないので、ファイルが何らかの形で破損していると考えていると思います。この問題をデバッグするにはどうすればよいですか? コードをステップ実行すると、問題は発生しませんが、そのまま実行すると、この特定のファイルの保存時に停止します。ライブラリのコードは次のとおりです。
ICollection<ZipEntry> c = (SortEntriesBeforeSaving) ? EntriesSorted : Entries;
foreach (ZipEntry e in c) // _entries.Values
{
OnSaveEntry(n, e, true);
e.Write(WriteStream);
if (_saveOperationCanceled)
break;
n++;
OnSaveEntry(n, e, false);
if (_saveOperationCanceled)
break;
// Some entries can be skipped during the save.
if (e.IncludedInMostRecentSave)
thisSaveUsedZip64 |= e.OutputUsedZip64.Value;
}
そのループにブレークポイントを置き、各ファイルを個別に保存すると、「不良ファイル」が表示されてもチョークしません。
何かご意見は?よろしくお願いします!
編集1:
明確にするために、「チョーク」と言うときは、ある種の無限ループに入り、「不良ファイル」を圧縮して残りのファイルに移動することを続行しないことを意味します。また、これは多くの人が使用しているファイルなので、破損していないはずです。
編集2:
以下に絞り込みました。
zip.CompressionMethod = CompressionMethod.Deflate;
その圧縮モードが問題の原因です。これはある種のバグだと確信しています。もう 1 つの圧縮方法である Bzip2 は、非常に低速です。これをどのように回避するかはまだわかりません。
編集3:
DotNetZip は実に奇妙です。圧縮レベルを次のように調整して修正しました。
zip.CompressionLevel = CompressionLevel.Default;
これで問題は解決しましたが、数分後に戻ってきて、機能しなくなりました。Bzip2 はまだ動作しますが、前に述べたように、信じられないほど遅いです。そこで、ZipFile API の他の部分をいじり始め、これを追加しました。
zip.CodecBufferSize = 10240000;
これで動作するようになりました。バグが本当に何であるかわかりませんか?