-1

編集1:

トレント アプリケーションを構築します。異なるクライアントから同時にダウンロードしています。各ダウンロードはファイルの一部を表し、異なるクライアントには異なる部分があります。ダウンロードが完了したら、ファイル内の「空の」部分を見つけることで、今達成する必要がある部分を知る必要があります。

固定サイズのファイルを作成する 1 つの方法:

File.WriteAllBytes(@"C:\upload\BigFile.rar", new byte[Big  Size]);

私のファイルを部分として表す Arr:

BitArray TorrentPartsState = new BitArray(10);

例えば:

ファイルサイズは100です。

  TorrentPartsState[0] = true; // thats mean that in my file, from position 0 until 9 I **dont** need to fill in some information.
  TorrentPartsState[1] = true; // thats mean that in my file, from position 10 until 19 I **need** to fill in some information.

コンピューター/アプリケーションがシャットダウンされた場合でも、BitArray に含まれているものを保存する効果的な方法を見つけました。私が考えた 1 つの方法は、xml ファイルを使用して、一部が完了するたびに更新することです。

賢明で効果的な解決策だとは思いません。他のアイデアはありますか?

4

3 に答える 3

1

BitArray (System.Collections 内)を使用できます。

次に、ファイルのオフセットにアクセスすると、そのオフセットの BitArray を true に設定できます。

したがって、10,000 バイトのファイルの場合:

BitArray ba = new BitArray(10000);

// Visited offset, mark in the BitArray            
ba[4] = true;
于 2012-07-13T16:48:31.870 に答える
1

転送を開始するときは、次のことを知っているようです。

  1. 最終ファイルのサイズ。
  2. ファイルに使用するストリームの (最大) 数。

出力ファイルを作成し、必要なスペースを割り当てます。

関連するファイル名で 2 番目の「制御」ファイルを作成します。たとえば、独自の拡張子を追加します。そのファイルでは、ネットワーク ストリームに対応するストリーム ステータス構造体の配列を維持します。各ステータスは、開始オフセットと転送されたバイト数で構成されます。ストリーム バッファを定期的にフラッシュし、制御ファイルを更新して、進行状況とコミットされた内容を反映します。

テーマのバリエーション:

  • 制御ファイルは、転送されるセグメント (16MB チャンクなど) を定義し、不完全なセグメントとそれを取得する適切なサーバーを探すスレッドによってワーク キューとして扱われます。
  • 制御ファイルは、結果ファイル内の別個のフォークである可能性があります。(誰をからかっていますか?)
于 2012-07-13T20:17:04.497 に答える
0

ファイルにファイル システム (ディスク上など) を実装する - シンプルなものを使用するだけで、FOS アリーナで利用できるものでなければなりません

于 2012-07-13T16:47:23.917 に答える