2

wcf を使用してクライアントからサーバーにファイルをアップロードするアプリケーションを構築しており、接続が失敗した場合にアップロードを再開する方法を実装しようとしています。500 KB のファイルがあり、アップロードが開始されて接続に失敗し、100 KB だけがコピーされたとします。再開すると、サーバー アプリケーションは 100 KB あることを認識します。

次のようなコードで送信されたストリームを読むと:

while ((bytes = stream.Read(buffer, 0, bufferSize)) > 0)
  1. その 0 (オフセット) は、読み取りを開始するバイトですか??
  2. もしそうなら、100から読み始めるべきですか?? 何かのようなもの:

    while ((bytes = stream.Read(buffer, 100, bufferSize)) > 0)

次に、既存の不完全なファイルにバイトを追加しますか??

これは私のコードです:

using (FileStream fs = new FileStream(@"C:\" + name, FileMode.Append))
{
    int bufferSize = 4 * 1024; // 4KB buffer
    byte[] buffer = new byte[bufferSize];
    int bytes;

    while ((bytes = stream.Read(buffer, 100, bufferSize)) > 0)
    {
        fs.Write(buffer, 100, bytes);
        fs.Flush();
    }
    stream.Close();
    fs.Close();
}

どのような変更を加える必要がありますか??

4

1 に答える 1

0

いいえ、オフセットは、ストリームから読み取られたバイトの COPY を開始するバッファー内の場所を指定します。

あなたがやりたいことはシークです。 Stream.Seek(100, SeekOrigin.Begin);
これには、ストリームの最初の 100 バイトを「スキップ」する効果があります。
その時点で、あなたは読み始めたいと思うでしょう....

この再開を行う場合は、CRC や MD5 などを使用して、完了後にファイルの内容を確認することをお勧めします。

于 2011-06-08T22:43:57.930 に答える