9

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

编码语言为 C++,代码应适用于 Linux、windows 和任何其他操作系统。这意味着使用标准 C 或 C++ 函数/类。

这种微不足道的需求显然没有微不足道的解决方案。

4

6 回答 6

11

使用 std 的流,您可以使用:

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

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

ofile.seekp(0, std::ios_base::end);
ofile.tellp();
于 2010-03-11T10:33:36.960 回答
6

您可以使用 stat 系统调用:

#ifdef WIN32 
_stat64()
#else
stat64()
于 2010-03-11T12:04:58.630 回答
2

如果您只需要文件大小,这肯定是矫枉过正,但总的来说,我会使用Boost.Filesystem进行平台无关的文件操作。在它包含的其他属性函数中

template <class Path> uintmax_t file_size(const Path& p);

您可以在此处找到参考。尽管 Boost Libraries 可能看起来很大,但我发现它经常非常有效地实现事物。您也可以只提取您需要的功能,但这可能会很困难,因为 Boost 相当复杂。

于 2010-03-11T11:41:44.107 回答
0

简单:

std::ifstream ifs; 
ifs.open("mybigfile.txt", std::ios::bin); 
ifs.seekg(0, std::ios::end); 
std::fpos pos = ifs.tellg();
于 2010-03-11T10:34:29.837 回答
-1

通常我们希望以最便携的方式完成工作,但在某些情况下,尤其是这样的情况,我强烈建议使用系统 API 以获得最佳性能。

于 2010-03-11T12:11:31.067 回答
-1

可移植性要求您使用最少的公分母,即 C。(不是 c++)我使用的方法如下。

#include <stdio.h>

long filesize(const char *filename)
{
FILE *f = fopen(filename,"rb");  /* open the file in read only */

long size = 0;
  if (fseek(f,0,SEEK_END)==0) /* seek was successful */
      size = ftell(f);
  fclose(f);
  return size;
}
于 2010-07-30T17:28:37.683 回答