确定大于4GB的文件的大小

KPe*_*xEA 8 c c++ fseek fgetpos

代码目前正在执行此操作,fgetpos会处理大于4GB的文件,但搜索会返回错误,所以任何想法如何寻找结束file > 4GB

fpos_t currentpos;

sok=fseek(fp,0,SEEK_END);
assert(sok==0,"Seek error!");

fgetpos(fp,&currentpos);
m_filesize=currentpos;
Run Code Online (Sandbox Code Playgroud)

R..*_*R.. 9

忽略出现在其中的"64"的所有答案.在Linux上,您应该添加-D_FILE_OFFSET_BITS=64到CFLAGS并使用fseekoftello/返回off_t值而不是的函数long.这些不是C的一部分,而是POSIX.其他(非Linux)POSIX系统可能需要不同的选项以确保它off_t是64位; 检查你的文档.

  • @qed:"不属于POSIX":见http://pubs.opengroup.org/onlinepubs/9699919799/functions/contents.html; `-D_FILE_OFFSET_BITS = 64`的用法:见http://man7.org/linux/man-pages/man7/feature_test_macros.7.html (2认同)

dav*_*pcj 6

如果您在Windows中,则需要GetFileSizeEx(MSDN).返回值是64位int.

在linux stat64(手册页)是正确的.如果您正在处理文件*,请使用fstat.