我有一个巨大的二进制文件,它是 2148181087 字节(> 2gb)
我正在尝试做fopen (file, "r")
,但失败了
无法打开:xyz 文件(值太大,无法存储在数据类型中)
当文件大小> 2gb 时,我在手册页上阅读了 EOVERFLOW 错误。
奇怪的是,我使用了一个不同的输入文件,它也“几乎”与第一个文件 2142884400 字节(也 > 2gb)一样大,fopen
可以正常工作。
文件大小是否有任何截止fopen
或是否有任何替代方法来解决这个问题?
我有一个巨大的二进制文件,它是 2148181087 字节(> 2gb)
我正在尝试做fopen (file, "r")
,但失败了
无法打开:xyz 文件(值太大,无法存储在数据类型中)
当文件大小> 2gb 时,我在手册页上阅读了 EOVERFLOW 错误。
奇怪的是,我使用了一个不同的输入文件,它也“几乎”与第一个文件 2142884400 字节(也 > 2gb)一样大,fopen
可以正常工作。
文件大小是否有任何截止fopen
或是否有任何替代方法来解决这个问题?
截止值是 2GB,与您的想法相反,它不是2,000,000,000 (2x1000 3 )。
它是 2,147,483,648 (2x1024 3 )。因此,您的第二个有效文件实际上小于 2GB)。
在计算机世界中,2GB 在硬盘制造商的心目中只有 2,000,000,000,所以他们可以说他们的磁盘比实际更大:-) - 这让他们说他们的磁盘实际上是 2.1GB。
“解决此问题的替代方法”取决于您使用的操作系统/库。
对于 GNU C 库,您可以fopen64
使用fopen
; 它使用 64 位文件句柄(还有一个宏可以fopen
使用 64 位文件句柄)。
对于 Windows,您可能必须切换到 Win32 文件管理 API,您可以使用CreateFile
.