11

我尝试写入一个大文件,但它似乎不适用于大于 2GB 的文件。我尝试过使用 boost::iostreams::file_sink。这只是提升流的限制吗?还有其他方法可以在 Win64 和 win32 上编写大文件吗?

4

3 回答 3

9

这取决于:

  • 您正在使用的文件系统。像 FAT 这样的旧文件系统只允许最大 2GB 的文件。使用 NTFS。
  • 您的库必须编译为允许大文件(64 位查找偏移量)。如果他们使用 32 位整数在文件中查找(检查调用“seek”和“tell”的参数和结果),您只能访问 2GB(2^31 位,第 32 位是符​​号 +/-)

这也可能有帮助: http: //www.boost.org/doc/libs/1_37_0/libs/iostreams/doc/faq.html#offsets

于 2008-11-19T14:59:52.890 回答
6

在 Win32/64 中,ReadFile 和 WriteFile 可以写入大于 4gb 的文件。定位是通过 SetFilePointerEx 中的 64 位 _LARGE_INTEGER 值完成的。同样,要获得文件大小,您需要GetFileSizeEx而不是基本的 GetFileSize。

于 2008-11-19T15:13:24.877 回答
1

在 NTFS 中,唯一真正的限制是卷的大小。如果您想对此进行测试,您可以使用命令行创建一个虚拟文件:
fsutil file createnew [filename] [validdatalength]
例如:
fsutil file createnew TestFile.bin 65536000000
假设您有一个 NTFS 卷,它将创建一个 64GB 的文件。

于 2008-11-19T16:34:20.733 回答