gpt4 book ai didi

.net - 如何使用 FileStream 读取超过 2 GB 的大文件

转载 作者:行者123 更新时间:2023-12-04 17:54:48 25 4
gpt4 key购买 nike

如果我有一部电影 (MKV) 并且它的大小大约为 7 G.B 我如何在 FileStream 中读取它..我们知道 int 的最大大小约为 2,147 MB​​ .. 如何从索引 3G.B 开始读取 .. 因为 FileStream 中的 .Read() 方法将偏移量作为整数,其中 3 GB 超出了 int 范围 .. ???

private void readingLargeFile(string path)
{
int start = 3*(1024*1024*1024);

FileStream fs = new FileStream(path,FileMode.Open);
fs.Read(data, start, (1024*8) );
}

最佳答案

阅读并没有按照您的想法去做。

Read 中的偏移量是从开始写入数据的缓冲区 开始的偏移量,它不是文件< 中的偏移量/em> 从哪里开始阅读。

如果您已经部分填充了缓冲区并且您还想再添加一点,它通常是非零的:

fs.Read (data,  0, 8 );   // Put first 8 bytes of file at buffer start
fs.Read (data, 16, 8 ); // Put next 8 bytes of file at buffer end
fs.Read (data, 8, 8 ); // Put first 8 bytes of file at buffer middle

在该示例中,包含 aaaaaaaabbbbbbbbbcccccccc 的文件将在缓冲区中结束为:

aaaaaaaaccccccccbbbbbbbb

你需要先寻找,它使用long作为偏移值,所以它应该能够轻松处理8G文件。像这样的东西将是一个很好的起点:

private void readingLargeFile (string path) {
long start = 3L * 1024L * 1024L * 1024L;

FileStream fs = new FileStream (path, FileMode.Open);
fs.Seek (start, SeekOrigin.Begin)
fs.Read (data, 0, 8 * 1024 );
}

Seek 更改为文件的当前位置(它将读取和/或写入的位置,具体取决于您调用的打开模式和函数)。

因此 fs.Seek (start, SeekOrigin.Begin) 会将文件指针设置为从文件开头开始的 start 个字符。您还可以指定除 SeekOrigin.Begin 之外的其他移动方法,从当前位置开始寻找,例如向前 27 个字节,或从文件末尾开始寻找。

有关 Seek 的完整详细信息可在 MSDN 上找到和 Read .

关于.net - 如何使用 FileStream 读取超过 2 GB 的大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8920552/

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