在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);
答案 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位。适用于所有主要平台。