タイトル : Re^4: 解凍せずにZIPファイルへフォルダを追加する方法 投稿日 : 2016/08/07(Sun) 10:44 投稿者 : Kobaちゃん
> > Aフォルダを圧縮してX.zipを作成。 次に、Bフォルダが生成されたら、X.zipを解凍して復元したAフォルダのルートに、Bフォルダを作成して、この直下にBフォルダのファイルをAddFileで追加して.... > > ただ、この手順では、フォルダが100本(ファイルは総数は概ね1万本)近くあると、100本目のフォルダを結合して最終のX.zipを完成させるのに時間がかかります。 解凍することなく書庫ファイルにフォルダを追加するか、zipファイル同士をマージさせ、処理時間を短縮したい。 > > 「解凍して」というのがよく分かりません。 > 私が書いた手順には、アーカイブファイル内の各エントリの「解凍」処理は含まれません。 > 実際、DotNetZipおよび(.NET 4.5以降専用の)System.IO.Compression.ZipArchiveで確認しましたが、1MBのファイル100個を追加する処理において、アーカイブ内にエントリが存在していないケースと10000個程度存在しているケースで最大1.3倍程度の差しか出ませんでした。 時間まで調査して頂きありがとうございました。 例が不正確でした。 依頼元の話では場合に よっては最終X.zipを解凍するのに約5分かかるようですので、かなりのフォルダ数とファイル数 が書庫には入っていると思います。 依頼元の実態を正確に把握していませんでした m(_ _)m これは別の意味で問題ですが(^_^;) 本題に戻りますが 'ZipFileオブジェクトを使って Dim zf As New ICSharpCode.SharpZipLib.Zip.ZipFile(f) f:ファイルのフルパス zf.Add(f,エントリパス名) 第2引数でエントリ名を指定しするとできそうです。現在、試しいるところです。 結果がでましたら、投稿する予定です。 BフォルダにあるファイルはBフォルダ直下でなく、....B\bb\b下にあるためこのフォルダ構造を保って 追加したいためZIPファイルにBフォルダを追加という投稿にしました。解凍後は「B\bb\b\ファイル名」 を期待していました。 単純に第1引数にフォルダ名を入れただけでは、解凍後のフォルダ構造が「....B\bb\b\ファイル名」と なり期待通りでなかったのですが、addメソッドの第2引数でエントリ名(B\bb\b\ファイル名)を指定 するとうまくいきそうです。 |