[解決済み] 同じボリュームをソースとデスティネーションの両方として使用することはできません
質問
以下のコードで分割アーカイブを作成しています。
string filename = "FileName.pdf";
using (ZipFile zip = new ZipFile())
{
zip.UseZip64WhenSaving = Zip64Option.Default;
zip.CompressionLevel = Ionic.Zlib.CompressionLevel.Default;
using (FileStream stream = new FileStream(temp, FileMode.Open))
{
zip.AddEntry(filename, stream);
zip.MaxOutputSegmentSize = settings.AttachmentSize * (1024 * 1024);
zip.Save(zipFileName);
}
}
上記のコードでは、3つのファイルが生成されます。
file.zip, file.z01 and file.z02
.
そのzipファイルを右クリックし
Extract All
(WinRARなどのzipソフトを使わず、Windows内蔵のzipだけで展開)すると、以下のようなエラーになります。
同じボリュームをコピー元とコピー先の両方として使用することはできません。
変なのは、最初にファイルを取り出そうとしたときだけ起こることで、それ以降は問題なく取り出せるので、最初にファイルがどのように圧縮されたかが問題なのでしょう。
アップデイト1
別のフォルダに解凍しても同じことが起こる
DotNetZip Codeplexのサイトでもこの問題について議論されていますが、まだ解決されていないようです。
http://dotnetzip.codeplex.com/discussions/239172
http://dotnetzip.codeplex.com/discussions/371005
アップデイト2
のドキュメントを見ると MaxOutputSegmentSize プロパティで、引用されています。
Windowsエクスプローラで分割アーカイブを展開できるとは思えません。
しかし、その理由についての詳しい説明はありません。上記の通りなので、誤検出と判断しています。
この現象は、最初にファイルを展開しようとしたときだけ発生します。 その後の抽出は問題なし
Windows 8.1 64bitを使用しています。
解決方法を教えてください。
ソフトウエアの不具合の原因を探るとき、まず最初にすることは、エラーメッセージの発生源を突き止めることでしょう。 そのためには
まずはGoogleで
. 2回目のヒット(今)は金字塔。
誰か
という名前のファイルにあるリソースID #10209 という特定の文字列を見つけ、Windows 実行ファイルをデコンパイルしました。
zipfldr.dll
マイクロソフトの著作権表示付き
zipfldr.dllは、Windowsが.zipファイルの内容をフォルダのように表示するために使用するシェル名前空間拡張子で、これは見事に一致します。 Regedit.exeで、次の場所に移動して見ることができます。
HKEY_CLASSES_ROOT\CLSID\ {E88DCCE0-B7B3-11d1-A9F0-00AA0060FA31}
を一次登録します。 その
HKEY_CLASSES_ROOT\SystemFileAssociations\ .zip\CLSID
レジストリキーは、.zip ファイルと関連付けます。
つまり、エクスプローラーの拡張子が倒れるというのは厳然たる事実なんですね。 もちろん、あなたができることはほとんどありません。 唯一残っている疑念は、使用しているZipライブラリが、スパンファイルの内容を混乱させ、その結果、拡張子が倒れる原因になっている可能性があることです。 IonicとDotnetzipの両方が全く同じバグを持っている確率は低いでしょう。 プログラマーは、他のプログラマーのコードからインスピレーションを得て、「どうしてこうなるのか」を考えることがあります。 このエラーが偽りのものであるという事実は、棺桶に釘を刺すようなもので、あなたは悪いzipアーカイブのコンテンツが繰り返しエラーを引き起こすことを期待しているのです。
あなた かもしれない SysInternalsのプロセスモニターを使えば、根本的な問題をリバースエンジニアリングすることができます。 エクスプローラがファイルを読み書きしているのが見えるはずだ。 おそらくTEMPディレクトリで、そのディレクトリに.zipファイルがすでに存在する場合、このようなエラーが発生すると推測されます。 TEMP はほとんどのマシンにおいて非常に乱雑なフォルダで、多くのプログラムが適切に後始末をしないのです。 zip ライブラリも含めて、他の証明のない魅力的な理論です :)
それでもダメなら、最終的にはマイクロソフトに頼るしかない。 マイクロソフトには1-800の電話番号があり、製品に関する問題のサポートを受けることができます。 私は何度か利用したことがありますが、いつも問題を解決してくれて、初期費用を返金してくれました。 しかし、これはWindowsの問題であり、10億人のユーザーを持つ製品である。 せいぜい回避策を講じる程度で、実際にソフトウェアで修正できる可能性は極めて低いでしょう。 全く不可能というわけではなく、実際に行われています。 しかし、彼らが推奨する回避策は、Winzip"のようなサードパーティのユーティリティを使用することです。 あなたが聞きたいことではありません。
関連
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】Nullableオブジェクトは値を持たなければならない?