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

发布于 2024-11-30 09:00:51 字数 235 浏览 0 评论 0原文

FileStream.Read() 定义为:

public override int Read(
    byte[] array,
    int offset,
    int count
)

如何从大于 int.MaxValue 的偏移量读取一些字节?

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

我该怎么做?

FileStream.Read() is defined as:

public override int Read(
    byte[] array,
    int offset,
    int count
)

How can I read some bytes from an offset bigger than int.MaxValue?

Let's say I have a very big file and I want to read 100MB starting from position 3147483648.

How can I do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挽你眉间 2024-12-07 09:00:51

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

stream.Position = 3147483648;

然后使用Read()。当您知道需要读取 [n] 个字节时,最常使用 offset

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 个字节读入 buffer(或抛出异常)。请注意,Read() 不能保证一次性读取所有所需的数据,因此通常需要一个递增偏移量的循环。

The offset here is the offset in the array at which to start writing. In your case, just set:

stream.Position = 3147483648;

and then use Read(). The offset is most commonly used when you know you need to read [n] bytes:

int toRead = 20, bytesRead;
while(toRead > 0 && (bytesRead = stream.Read(buffer, offset, toRead)) > 0)
{
    toRead -= bytesRead;
    offset += bytesRead;
}
if(toRead > 0) throw new EndOfStreamException();

this will read exactly 20 bytes into buffer (or throw an exception). Note that Read() is not guaranteed to read all the required data in one go, hence a loop incrementing an offset is usually required.

梦言归人 2024-12-07 09:00:51

根据 http://msdn.microsoft.com/en -us/library/system.io.filestream.read.aspx offset 参数是 byte[] 数组内的偏移量

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

偏移量
类型:System.Int32
数组中将放置读取字节的字节偏移量。

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

Read() 只是从当前位置读取,该位置恰好是一个 long 并且应该在调用 Read() 之前设置,请参阅 http://msdn.microsoft.com/en-us/library/system .io.filestream.position.aspx

According to http://msdn.microsoft.com/en-us/library/system.io.filestream.read.aspx the offset parameter is an offset inside the byte[] array:

array
Type: System.Byte[]
When this method returns, contains the specified byte array with
the values between offset and (offset + count - 1) replaced by the
bytes read from the current source.

offset
Type: System.Int32
The byte offset in array at which the read bytes will be placed.

count
Type: System.Int32
The maximum number of bytes to read.

Read() just reads from the current positon which happens to be a long and should be set before calling Read() see http://msdn.microsoft.com/en-us/library/system.io.filestream.position.aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文