我需要确定文件的字节大小。
编码语言是C ++,代码应该适用于Linux,Windows和任何其他操作系统。这意味着使用标准的C或C ++函数/类。
这种琐碎的需求显然不是一个简单的解决方案。
答案 0 :(得分: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();
如果你处理只写文件(std :: ofstream),那么方法就是另一种:
ofile.seekp(0, std::ios_base::end);
ofile.tellp();
答案 1 :(得分:6)
您可以使用统计系统调用:
#ifdef WIN32
_stat64()
#else
stat64()
答案 2 :(得分:3)
如果你只需要文件大小,那肯定是矫枉过正的,但一般情况下,我会选择Boost.Filesystem进行与平台无关的文件操作。 其中包含的其他属性函数
template <class Path> uintmax_t file_size(const Path& p);
您可以找到参考here。尽管Boost Libraries看起来很庞大,但我发现它经常非常有效地实现。你也可以只提取你需要的功能,但这可能证明很难,因为Boost相当复杂。
答案 3 :(得分:0)
Simples:
std::ifstream ifs;
ifs.open("mybigfile.txt", std::ios::bin);
ifs.seekg(0, std::ios::end);
std::fpos pos = ifs.tellg();
答案 4 :(得分:-1)
我们通常希望以最便携的方式完成工作,但在某些情况下,尤其是这样,我强烈建议您使用系统API以获得最佳性能。
答案 5 :(得分:-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;
}