写大文件

时间:2008-11-19 14:18:44

标签: c++ file-io win64

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

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

答案 2 :(得分:1)

在NTFS中,唯一的实际限制是卷的大小。如果要测试它,可以使用命令行创建一个虚拟文件:
fsutil文件createnew [filename] [validdatalength]
例如:
fsutil文件createnew TestFile.bin 65536000000
假设您有NTFS卷,那应该创建一个64GB的文件。