2011-06-08 87 views
2

我正在构建一个应用程序,用于将文件从客户端上传到使用wcf的服务器,并且我试图实现一种在连接失败时恢复上载的方法。假设我有一个500 KB的文件,上传开始并且连接失败,只有100 KB被复制。当我恢复时,服务器应用程序知道它有100 KB。使用wcf恢复和上传文件

当我读与这样的代码传输的流:其中I开始读取字节

while ((bytes = stream.Read(buffer, 0, bufferSize)) > 0) 
  1. 那是0(偏移)??
  2. 如果是这样,我应该从100开始读?类似:

    而((字节= stream.Read(缓冲液,100,缓冲区大小))> 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(); 
} 

我有什么变化,使?

回答

0

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

你可能想要做的是寻求。 Stream.Seek(100, SeekOrigin.Begin);
这具有“跳过”流中前100个字节的效果。
在这一点上,你会想开始阅读....

如果你做这个恢复的事情,那么我建议使用CRC或MD5或其他东西,以验证完成后的文件内容。

+0

我得到一个异常,该方法不受支持。 CanSeek属性设置为false。 – blur 2011-06-09 00:31:56