为什么这个块读取代码不起作用?



我不知道为什么,但我的分块上传不起作用。读取的第一个块可能是正确的,但下面的块只包含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[]——用0填充的数组。chunkSize是256kB(1024*256字节),我要读取的文件大小约为11 MB(=111000kB),因此应该将其拆分为(int)Math.Ceiling((double)(file.fileSize / chunkSize))部分。

我做错了什么?

根据文档,FileStream.Read返回读取的字节数。因此以下循环:

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

将一直运行到流结束。要读取你想要的区块,你应该只调用一次方法:

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

此外,请考虑使用using语句,而不是手动关闭文件。

相关内容

  • 没有找到相关文章

最新更新