0

そのため、教育目的で独自のダウンロード マネージャーを開発しています。ファイルをダウンロードする複数の接続/スレッドがあり、各接続はファイルの特定の範囲で機能します。すべてのチャンクをフェッチした後、このチャンクをまとめて元のファイルを再作成する方法が正確にはわかりません。

私がしたこと:

まず、「wb」モードで一時ファイルを作成し、各接続/スレッドがチャンクをダンプできるようにしました。ただし、接続がこれを行うたびに、以前に保存されたチャンクが上書きされます。これは、「wb」ファイル記述子を使用したためだと考えました。「ab」に変更しましたが、seek() 操作を実行できなくなりました

私が探しているもの:

このチャンクを元のファイルに再パッケージ化するエレガントな方法が必要です。他のダウンロード マネージャーがどのようにそれを行っているか知りたいです。

少し早いですがお礼を。

4

2 に答える 2

2

チャンクを別の一時ファイルに書き込んでから、元の順序で結合する必要があります。すべてのスレッドに対して1つのファイルを開く場合は、データの正しい順序を維持するためにそのファイルに順次アクセスする必要があります。これにより、スレッドは前のファイルを待機する必要があるため、スレッドの使用が破棄されます。ところで、wbモードでファイルを開く必要があります。

于 2010-12-07T16:52:44.880 に答える
1

あなたはそれをうまくやっていました:seek()そしてwrite()。それはうまくいくはずです!

ここで、あまり多くのスレッドがファイル全体を処理するのではなく、よりクリーンな構造が必要な場合は、ダウンローダー スレッドとディスク書き込みスレッドの使用を検討することをお勧めします。この最後のものは、他のいずれかによって起こされるまでスリープし、ディスクに数キロバイトを書き込み、スリープに戻る場合があります。

于 2010-12-07T16:48:56.800 に答える