2

我有一个巨大的二进制文件,它是 2148181087 字节(> 2gb)

我正在尝试做fopen (file, "r"),但失败了

无法打开:xyz 文件(值太大,无法存储在数据类型中)

当文件大小> 2gb 时,我在手册页上阅读了 EOVERFLOW 错误。

奇怪的是,我使用了一个不同的输入文件,它也“几乎”与第一个文件 2142884400 字节(也 > 2gb)一样大,fopen可以正常工作。

文件大小是否有任何截止fopen或是否有任何替代方法来解决这个问题?

4

2 回答 2

6

截止值是 2GB,与您的想法相反,它不是2,000,000,000 (2x1000 3 )。

它是 2,147,483,648 (2x1024 3 )。因此,您的第二个有效文件实际上小于 2GB)。

在计算机世界中,2GB 在硬盘制造商的心目中只有 2,000,000,000,所以他们可以说他们的磁盘比实际更大:-) - 这让他们说他们的磁盘实际上是 2.1GB。

于 2009-11-17T05:24:06.367 回答
5

“解决此问题的替代方法”取决于您使用的操作系统/库。

对于 GNU C 库,您可以fopen64使用fopen; 它使用 64 位文件句柄(还有一个宏可以fopen使用 64 位文件句柄)。

对于 Windows,您可能必须切换到 Win32 文件管理 API,您可以使用CreateFile.

于 2009-11-17T05:27:31.853 回答