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

不,偏移量指定缓冲区中开始复制从流中读取的字节的位置。

你可能想做的是寻找。 Stream.Seek(100, SeekOrigin.Begin);
这具有“跳过”流中前 100 个字节的效果。
那时,您将想要开始阅读......

如果你做这个简历的事情,那么我建议使用CRC或MD5之类的东西,在完成后验证文件的内容。

于 2011-06-08T22:43:57.930 回答