2011-06-08 66 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