Fopen无法使用二进制文件

Jit*_*ani 2 c fopen memory-management

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

我正在努力,但fopen (file, "r")它失败了

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

当文件大小> 2gb时,我在手册页上看到EOVERFLOW错误.

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

文件大小是否有任何截止,fopen或者有没有其他方法可以解决这个问题?

pax*_*blo 6

截止值为2GB,与您的想象相反,不是 2,000,000,000(2x1000 3).

这是2,147,483,648(2x1024 3).所以你的第二个文件的大小实际上小于2GB.

在计算机领域,2GB,在硬盘制造商的脑海中只有2,000,000,000,因此他们可以说他们的磁盘比实际大:-) - 它让他们说他们的磁盘实际上是2.1GB.


Jam*_*lis 5

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

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

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