C# FileStream,从大文件中读取数据块。文件大小大于int。如何设置偏移量?

C# FileStream,从大文件中读取数据块。文件大小大于int。如何设置偏移量?,c#,file,stream,filestream,C#,File,Stream,Filestream,FileStream.Read()定义为: public override int Read( byte[] array, int offset, int count ) 如何从大于int.MaxValue的偏移量读取一些字节 假设我有一个非常大的文件,我想从位置3147483648开始读取100MB 我该怎么做呢?偏移量这里是开始写入的数组中的偏移量。在您的情况下,只需设置: stream.Position = 3147483648; 然后使用Read()。当您知道

FileStream.Read()定义为:

public override int Read(
    byte[] array,
    int offset,
    int count
)
如何从大于int.MaxValue的偏移量读取一些字节

假设我有一个非常大的文件,我想从位置3147483648开始读取100MB


我该怎么做呢?

偏移量
这里是开始写入的数组中的偏移量。在您的情况下,只需设置:

stream.Position = 3147483648;
然后使用
Read()
。当您知道需要读取[n]个字节时,
偏移量
最常用:

int toRead = 20, bytesRead;
while(toRead > 0 && (bytesRead = stream.Read(buffer, offset, toRead)) > 0)
{
    toRead -= bytesRead;
    offset += bytesRead;
}
if(toRead > 0) throw new EndOfStreamException();
这将准确地将20个字节读入
缓冲区
(或引发异常)。请注意,
Read()
不能保证一次性读取所有必需的数据,因此通常需要一个递增偏移量的循环。

根据
offset
参数,是字节[]数组中的
偏移量:

排列 类型:System.Byte[] 此方法返回时,包含指定的字节数组 偏移量和(偏移量+计数-1)之间的值替换为 从当前源读取的字节数

抵消 类型:System.Int32 数组中用于放置读取字节的字节偏移量

计数 类型:System.Int32 要读取的最大字节数


Read()
只是从当前位置读取,而当前位置恰好是
长的
,应该在调用
Read()
之前进行设置,请参见

但是当偏移量超过int.MaxValue时会发生什么?您将如何处理此问题?@tayl0rs由于此时将超过缓冲区的最大数组大小,因此这是一个没有意义的问题。即使启用了非常大的阵列支持,您也无法在任何维度上超过它;请参阅此处的“备注”:(请记住:偏移量与数组相关,而不是与流相关)