2012-06-07 38 views
3

在C#中,FileStream的方法Read/Write/Seek在参数中取integer。在previous post中,我看到了一个很好的解决方案来读取/写入大于分配给进程的虚拟内存的文件。在C#中查找和写入大于2GB的文件

如果您想从头到尾写入数据,此解决方案可以正常工作。但就我而言,我收到的大量数据没有特定的顺序。

我有工作的小于2GB代码的文件:

private void WriteChunk(byte[] data, int position, int chunkSize, int count, string path) 
    { 

     FileStream destination = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); 
     BinaryWriter writer = new BinaryWriter(destination); 
     writer.Seek((int) (position*chunkSize), SeekOrigin.Begin); 
     writer.Write(data, 0, count); 
     writer.Close(); 
    } 

有没有一种方法,我可以寻求和写入我的组块的文件大于2GB?

回答

4

不要使用int,使用long。寻求需要很长的时间。

虽然你需要使用很长的时间,而不是只是在某处抛出int。

+1

谢谢!我看到BinaryWriter没有超载寻找一个很长的,但FileStream。 –

+0

MSDN文档显示BinaryWriter.Seek的偏移参数为int。在VS2010中进行双重检查,BinaryWriter.Seek将第一个参数显示为int,没有重载。那么需要多长时间? – user957902

+2

在打开BinaryReader之前,您需要查找FileStream。 – usr

2
writer.Seek((long)position*chunkSize, SeekOrigin.Begin); 
+0

它不适用于BinaryWriter。 –

+0

直接使用filestream,foo! – Joshua