2014-10-05 54 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声明,而不是手动关闭文件。

相关问题