質問

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

アップデート: 最初の答えから、私はSevenzipSharpを使用するつもりだと思います。ファイルを100MBアーカイブされた部品に分割する方法を理解していると思いますが、まだ2つの質問があります。

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

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

役に立ちましたか?

解決

を見てみましょう Sevenzipsharp, 、これを使用して、スピット7Zファイルを作成し、それらをアップロードするものを何でも実行してから、サーバー側で抽出できます。

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

他のヒント

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

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

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

編集

明確にするために - 減圧は上記の逆シーケンスに過ぎないため、圧縮コードが動作すると、減圧が簡単になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top