C++ fstream在文件读写时是否存在2G的限制?

7
我正在编写一个C++程序来读/写一个大文件(可能大于60GB)。通过搜索问题,似乎32位系统中的文件IO存在2GB的限制(我正在使用Windows 7 64位,但我的程序是使用mingw32编译的)。在我的程序中,我每次写入10个整数到文件中,所有这些数字都是基于某种算法随机生成的。似乎当文件大小超过40GB时,程序仍然可以运行,但是没有办法检查程序读取的数据是否真的是存储在文件中的数据还是一些垃圾数字。但无论如何,该程序没有报告任何警告或错误。在32位程序中读/写大于60GB的文件是否真的可行?

可能是 https://dev59.com/FXVC5IYBdhLWcg3wbQbA 的重复问题。 - Carey Gregory
我认为Carey Gregory提供的链接回答了2G字节文件限制的问题。为什么您无法检查数字是否正确?您可以通过编写数字序列0到2,147,483,647(所有正32位整数)来进行测试,而不是编写随机数字,这将是一个8GB的文件,然后读取它。 - gbulmer
1个回答

1

Fat32文件系统有文件大小限制(最大4GB),Windows 7默认情况下绝对不应该使用该文件系统。

此外,在32位系统上,您可以使用CreateFileMapping/MapViewOfFile一次性映射到内存中的文件大小存在限制。但是,fstream在内部不使用CreateFileMapping/MapViewOfFile,因此文件大小没有限制(除了文件系统的限制)。即使使用CreateFileMapping,您也可以将较大文件的一部分映射到内存中,因此除了文件系统强加的限制外,没有其他限制。


哦,如果fstream在文件大小上没有实际限制,那对我来说将是一个好消息,因为我不知道如何将文件分成多个部分以避免4GB的限制。谢谢。 - user1285419
1
“Windows 7 默认情况下绝对不应该使用那个文件系统。”-- 这个说法太笼统了。然而,由于问题涉及到一个40GB或60GB的文件,它可能不在USB闪存中。 - Windows programmer

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