1

私のアプリケーションでは、ユーザーはドライブ上の大きなファイル(> 100 mb)を選択します。次に、プログラムが選択されたファイルを取得し、100mb以下のアーカイブされた部分に切り刻むことを望みます。これはどのように行うことができますか?どのライブラリとファイル形式を使用する必要がありますか?サンプルコードを教えてください。最初の100mbのアーカイブ部分が作成されたら、それをサーバーにアップロードし、次の100mbの部分をアップロードし、アップロードが完了するまで続けます。その後、別のコンピューターから、これらのアーカイブされたパーツをすべてダウンロードし、元のファイルに接続したいと思います。たとえば、これは7zipライブラリで可能ですか?ありがとう!

更新:最初の回答から、SevenZipSharpを使用する予定であり、ファイルを100 MBのアーカイブ部分に分割する方法を理解したと思いますが、まだ2つの質問があります。

  1. 次の100mbパーツを作成する前に、最初の100mbアーカイブパーツを作成してアップロードすることは可能ですか?
  2. 複数の分割されたアーカイブからSevenZipSharpを使用してファイルを抽出するにはどうすればよいですか?

更新#2: 7-zip GUIをいじって、マルチボリューム/分割アーカイブを作成していましたが、最初のGUIを選択してそこから抽出すると、すべての分割アーカイブからファイル全体が抽出されることがわかりました。これにより、後続の部分へのパスが最初の部分に含まれていると思います(または連続していますか?)。ただし、これがコンソールから直接機能するかどうかはわかりませんが、今すぐ試して、最初の更新からの質問2が解決されるかどうかを確認します。

4

2 に答える 2

3

SevenZipSharpを見てください。これを使用して 7z ファイルを作成し、アップロードしたいことを何でもしてから、サーバー側で抽出できます。

アーカイブを分割するには、SevenZipCompressor.CustomParametersメンバーを見て、「v100m」を渡します。(7zip の 7-zip.chm ファイルで、さらに多くのパラメーターを見つけることができます)

于 2009-10-17T21:39:50.400 に答える
0

最初にデータを 100MB の「パケット」に分割し、次に各パケットを順番にコンプレッサーに渡し、それらが単なる個別のファイルであるかのように装うことができます。

ただし、この種の圧縮は通常、ストリームベースです。使用しているライブラリが Stream 派生クラスを介して I/O を実行する限り、データが渡されるときにその場で好きな方法でデータを「パケット化」する独自の Stream を実装するのは非常に簡単です。 Write() メソッドをファイルに書き込みます。そのファイルで 100MB を超えると、そのファイルを閉じて新しいファイルを開き、書き込みを続行します。

これらのアプローチのいずれかを使用すると、次の圧縮を続けながら、1 つの「パケット」を簡単にアップロードできます。

編集

明確にするために-解凍は上記の逆のシーケンスであるため、圧縮コードが機能するようになると、解凍は簡単になります。

于 2009-10-17T22:00:16.337 に答える