Fopen无法使用二进制文件

时间:2009-11-17 05:17:05

标签: c memory-management fopen

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

我正在尝试fopen (file, "r")并且

失败了
  

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

我在手册页上看到当文件大小>收到EOVERFLOW错误时2GB。

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

fopen的文件大小是否有任何中断,还是有其他方法可以解决这个问题?

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:5)

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

对于GNU C库,you can use fopen64代替fopen;它使用64位文件句柄(还有一个宏让fopen使用64位文件句柄。)

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