これまでのところ、DotNetZip をうまく使用してきましたが、問題が発生しました。何かが欠けているだけで、これは予想される動作なのか、それとも実際にはバグなのか疑問に思っています。
次の単純なコードを使用して、Zip 内のすべてのファイルを反復処理します。
using (ZipFile zip = ZipFile.Read(filepath))
{
foreach (ZipEntry content in zip)
{
// do stuff
}
}
これは問題なく動作するようで、zip 内のすべてのファイルとフォルダーを反復処理します。しかし今、この繰り返しが zip 内のフォルダーをスキップする Zip に出くわしました。ZipFile のエントリ プロパティを確認すると、実際にはフォルダが含まれていません。したがって、問題を引き起こしているのは反復ではなく、ZipFile 自体が間違って読み取られているようです。FileZip.CheckZip(...) で確認すると、すべて問題ないようで、 FileZip.FixZipDirectory(...) も役に立ちません。Zipは7zipなどで開ければ大丈夫そうです。
編集: わかりました、zip に何らかの問題があるようです。解凍して再圧縮したところ、エントリリストにすべてのフォルダーが含まれています。残念ながら、このアルゴリズムでスキャンされる zip に影響を与えることはできません。このような欠陥のある zip を検出または処理する方法を誰かが教えてくれたら、それは素晴らしいことです。現在、私が考えることができる唯一の方法は、ファイル エントリ名 (プレフィックスとしてフォルダー名を含む) からすべてのフォルダー名を取得することです。