2012-04-08 66 views
7

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

+0

可能的重复http://stackoverflow.com/questions/301995/write-large-file – 2012-04-08 22:18:15

+0

我认为由凯里格雷戈里给出的链接回答2GByte文件限制问题。为什么没有办法让你检查数字是否正确写入?您可以通过编写0到2,147,483,647(所有正整数32位整数)序列来测试,而不是编写随机数字,这将是一个8GB文件,然后再读回。 – gbulmer 2012-04-08 23:36:12

回答

1

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

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

+0

哦,如果fstream对文件大小没有限制,那么对我来说这将是一个好消息,因为我不知道如何将我的文件分解成多块以避免4GB的限制。谢谢 – user1285419 2012-04-09 00:49:02

+1

“默认情况下,Windows 7绝对不应该使用该文件系统。” - 这个陈述太宽泛了。但是,由于该问题涉及40GB或60GB文件,因此可能不在USB闪存上。 – 2012-04-09 00:54:38

+0

@Windowsprogrammer:exFAT – SigTerm 2012-04-09 09:54:39