Mur*_*sli 2 .net file filestream
如果我有一部电影(MKV)和它的大小像7 GB我怎么能在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) );
}
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 10
那读不符合你的想法.
偏移量Read是从开始写入数据的缓冲区开始的偏移量,它不是文件中开始读取的偏移量.
如果您已经部分填充了缓冲区并且想要更多地使用它,那么它通常只有非零值:
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
Run Code Online (Sandbox Code Playgroud)
在该示例中,包含的文件aaaaaaaabbbbbbbbcccccccc将最终在缓冲区中:
aaaaaaaaccccccccbbbbbbbb
Run Code Online (Sandbox Code Playgroud)
您需要先查找,并将其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 );
}
Run Code Online (Sandbox Code Playgroud)
Seek文件当前位置的更改(它将从中读取和/或写入的位置,具体取决于您调用的打开模式和函数).
因此,fs.Seek (start, SeekOrigin.Begin)将文件指针设置为文件start开头的字符.您还可以指定其他移动方法SeekOrigin.Begin,从当前位置搜索,如向前27个字节,或从文件末尾搜索.
| 归档时间: |
|
| 查看次数: |
4592 次 |
| 最近记录: |