编写大文件

11

我尝试写入一个大文件,但似乎对于大于2GB的文件无法正常工作。 我已经尝试使用boost::iostreams::file_sink。这只是boost流的限制吗?有没有其他方法可以在Win64和Win32上写入大文件?

3个回答

9
这取决于以下几点:
  • 您使用的文件系统。旧文件系统(如FAT)只允许最大2GB的文件,建议使用NTFS。
  • 您的库需要编译允许大文件(64位seek偏移)。如果他们使用32位整数在文件中寻找(检查"seek"和"tell"调用的参数和结果),则您仅能访问2GB(2^31bits,第32位是符号+/-)。

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


比较两个streampos时要小心,因为在VS2005中构建32位操作符==将在比较之前截断为32位。更好的方法是使用position_to_offset并比较偏移量。 - dalle
FAT32允许文件大小最大为4GB减1。但我同意使用NTFS的建议。 - Windows programmer

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

1
在NTFS中,唯一的限制是卷的大小。如果您想测试这个,可以使用命令行创建一个虚拟文件:
fsutil file createnew [文件名] [有效数据长度]
例如:
fsutil file createnew TestFile.bin 65536000000
假设您有一个NTFS卷,那么这应该会创建一个64GB的文件。

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