【发布时间】:2008-11-19 14:18:43
【问题描述】:
我尝试写入一个大文件,但它似乎不适用于大于 2GB 的文件。 我尝试过使用 boost::iostreams::file_sink。这只是提升流的限制吗?有没有其他方法可以在 Win64 和 win32 上写大文件?
【问题讨论】:
我尝试写入一个大文件,但它似乎不适用于大于 2GB 的文件。 我尝试过使用 boost::iostreams::file_sink。这只是提升流的限制吗?有没有其他方法可以在 Win64 和 win32 上写大文件?
【问题讨论】:
这取决于:
这也可能有帮助:http://www.boost.org/doc/libs/1_37_0/libs/iostreams/doc/faq.html#offsets
【讨论】:
在 Win32/64 中,ReadFile 和 WriteFile 可以写入大于 4gb 的文件。定位是通过SetFilePointerEx 中的 64 位 _LARGE_INTEGER 值完成的。同样,要获得您需要的文件大小GetFileSizeEx,而不是基本的 GetFileSize。
【讨论】:
在 NTFS 中,唯一真正的限制是卷的大小。如果您想对此进行测试,您可以使用命令行创建一个虚拟文件:
fsutil 文件 createnew [文件名] [有效数据长度]
例如:
fsutil 文件创建新 TestFile.bin 65536000000
假设您有一个 NTFS 卷,那应该会创建一个 64GB 的文件。
【讨论】: