2014-10-05 115 views
2

我不知道爲什麼,但我的分塊上傳不起作用。讀取的第一個塊可能是正確的,但以下塊只包含0爲什麼這個塊閱讀代碼不起作用?

/// <summary> 
    /// Gibt die Bytesequenz des angeforderten Chunks zurück 
    /// </summary> 
    /// <param name="chunkNumber">Die Position des Chunks im Array</param> 
    /// <returns>Die Bytesequenz des angeforderten Chunks</returns> 
    byte[] FileToChunk(int chunkNumber) 
    { 
     byte[] chunkBuffer = new byte[chunkSize]; 
     FileStream fileStream = new 
      FileStream("C:\\Users\\Patrick\\Downloads\\Prog\\UnityAssets\\start.unitypackage" 
           , FileMode.Open 
           , FileAccess.Read 
          ); 
     fileStream.Seek((chunkNumber - 1) * chunkSize, SeekOrigin.Begin); 
     while (fileStream.Read(chunkBuffer, 0, chunkBuffer.Length) > 0); 
     if ( fileStream.Position != fileStream.Length 
      && fileStream.Position != fileStream.Position - 1 
      ) 
       fileStream.Close(); 
     return chunkBuffer; 
    } 

因此,應提取的塊數作爲參數傳遞,並與 fileStream.Seek()我想去被問塊的位置。正如我已經說過的,這個方法的第一個調用返回一個可能工作的塊,但所有其他調用返回Byte[] - 數組填充0chunkSize是256kB(1024 * 256字節),我想讀取的文件大小爲〜11MB(= 11000kB),所以它應該被拆分成(int)Math.Ceiling((double)(file.fileSize/chunkSize))部分。

我在做什麼錯?

回答

1

根據文檔,FileStream.Read返回讀取的字節數。所以下面的循環:

while (fileStream.Read(chunkBuffer, 0, chunkBuffer.Length) > 0); 

將運行,直到流的結束。要閱讀你想你應該調用的方法只有一次塊:

fileStream.Read(chunkBuffer, 0, chunkBuffer.Length); 

而且,考慮使用using聲明,而不是手動關閉文件。

相關問題