文件大小> 4gb文件?

时间:2014-11-07 06:49:59

标签: c++

在MSVC中,我运行了以下代码。 a给我-1,b给我EINVAL,c给我0.当路径是一个可以适合32位值的文件时,这个函数工作正常。如何获取文件的长度> 4gb?

f = fopen(path.c_str(), "r+b");
printf("f=%X\n", f);
auto a = fseek(f, 0, SEEK_END);
auto b = errno;
auto c = ftell(f);

3 个答案:

答案 0 :(得分:3)

MSVC具有大多数C stdlib文件功能的64位变体,允许您处理大于4GB的文件,在您的情况下,请参阅_ftelli64。描述符也有_filelengthi64(您可以使用_fileno获得)。

答案 1 :(得分:2)

POSIX API使用lseek,它带有off_t个参数。

Windows API使用带有LARGE_INTEGER参数的SetFilePointerEx

@Necrolis告诉你clib MSVC扩展......

答案 2 :(得分:0)

boost::file_size返回最大的可用整数类型,因此至少 64位。适用于所有主要平台。