以C/C++获取文件大小的便携方式

chm*_*ike 8 c c++ portability filesize platform-independent

我需要确定文件的字节大小.

编码语言是C++,代码应该适用于Linux,Windows和任何其他操作系统.这意味着使用标准的C或C++函数/类.

这种微不足道的需求显然不是一个微不足道的解决方案.

Dew*_*wfy 7

使用std的流你可以使用:

std::ifstream ifile(....);
ifile.seekg(0, std::ios_base::end);//seek to end
//now get current position as length of file
ifile.tellg();
Run Code Online (Sandbox Code Playgroud)

如果你处理只写文件(std :: ofstream),那么方法是另一种方法:

ofile.seekp(0, std::ios_base::end);
ofile.tellp();
Run Code Online (Sandbox Code Playgroud)

  • 以二进制文件打开文件,否则可能会得到错误的结果.例如,文本ifstreams可以将`\ r \n`转换为`\n`翻译. (4认同)
  • 如果您只想获取文件大小,那么ifstream是否效率低下?stat()将在不必打开和搜索的情况下完成. (2认同)

Adi*_*dil 6

您可以使用stat系统调用:

#ifdef WIN32 
_stat64()
#else
stat64()
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,“stat”函数系列是 POSIX 的一部分,因此它们也适用于 UNIX 和类 UNIX 系统。 (2认同)