возобновление и загрузка файлов с помощью wcf - PullRequest
2 голосов
/ 09 июня 2011

Я создаю приложение для загрузки файлов с клиентов на сервер с помощью wcf и пытаюсь реализовать способ возобновить загрузку в случае сбоя соединения.Предположим, у меня есть файл размером 500 КБ, загрузка начинается, и соединение не устанавливается, скопировано только 100 КБ.Когда я возобновляю работу, серверное приложение знает, что оно имеет 100 КБ.

Когда я читаю поток, переданный с кодом, подобным следующему:

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();
}

Какие изменения я должен сделать ??

1 Ответ

0 голосов
/ 09 июня 2011

Нет, смещение указывает, где в буфере начинать копирование байтов, которые считываются из потока.

То, что вы можете сделать, это искать.Stream.Seek(100, SeekOrigin.Begin);
Это дает эффект "пропуска" первых 100 байтов в потоке.
С этого момента вы захотите начать читать ....

Если вы делаете это резюмевещь, тогда я предлагаю использовать CRC или MD5 или что-то, чтобы проверить содержимое файла после завершения.

...