在C#中寻找并写入大于2GB的文件。

3
在C#中,FileStream的方法Read / Write / Seek需要在参数中传递整数。在之前的帖子中,我看到了一个很好的解决方案,可以读取/写入大于进程分配的虚拟内存的文件。
如果您想从头到尾写入数据,则此解决方案有效。但在我的情况下,我收到的数据块没有特定的顺序。
我有一个适用于小于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的文件中寻找和写入数据块?

2个回答

4

不要使用int,使用long。Seek需要一个long类型的参数。

你需要在所有地方都使用long类型而不是在某个地方强制转换为int类型。


1
谢谢!我发现 BinaryWriter 没有重载,可以使用 long 进行定位。不过 FileStream 是可以的。 - Alex Rose
MSDN文档显示BinaryWriter.Seek的偏移参数为int类型。在VS2010中进行了双重检查,BinaryWriter.Seek显示第一个参数为int类型,没有重载。那么它将需要多长时间? - user957902
3
在打开BinaryReader之前,您需要查找FileStream。 - usr

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

直接使用文件流,foo! - Joshua
int和long的最大值都是2g,所以我不明白它们有什么区别? - Eitan
1
@Eitan:在C#中,long类型占用8个字节。 - Joshua

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接