gpt4 book ai didi

c# - FileStream Seek 在第二次调用大文件时失败

转载 作者:行者123 更新时间:2023-11-30 15:35:39 34 4
gpt4 key购买 nike

我正在处理大文件,从 10Gb 开始。我正在将文件的各个部分加载到内存中进行处理。以下代码适用于较小的文件 (700Mb)

 byte[] byteArr = new byte[layerPixelCount];
using (FileStream fs = File.OpenRead(recFileName))
{
using (BinaryReader br = new BinaryReader(fs))
{
fs.Seek(offset, SeekOrigin.Begin);

for (int i = 0; i < byteArr.Length; i++)
{
byteArr[i] = (byte)(br.ReadUInt16() / 256);
}
}
}

打开一个10Gb的文件后,第一次运行这个函数就OK了。但是第二个 Seek() 抛出一个 IO 异常:

An attempt was made to move the file pointer before the beginning of the file.

数字是:

fs.Length = 11998628352

偏移量 = 4252580352

byteArr.Length = 7746048

我假设 GC 在第二次调用之前没有收集关闭的 fs 引用并尝试了

    GC.Collect();
GC.WaitForPendingFinalizers();

但没有运气。

感谢任何帮助

最佳答案

我猜这是因为您的有符号整数索引器或 offset 正在滚动到负值。尝试将 offseti 声明为 long。

//Offest is now long
long offset = 4252580352;

byte[] byteArr = new byte[layerPixelCount];
using (FileStream fs = File.OpenRead(recFileName))
{
using (BinaryReader br = new BinaryReader(fs))
{
fs.Seek(offset, SeekOrigin.Begin);

for (long i = 0; i < byteArr.Length; i++)
{
byteArr[i] = (byte)(br.ReadUInt16() / 256);
}
}
}

关于c# - FileStream Seek 在第二次调用大文件时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609419/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com