我需要确定文件的字节大小。
编码语言为 C++,代码应适用于 Linux、windows 和任何其他操作系统。这意味着使用标准 C 或 C++ 函数/类。
这种微不足道的需求显然没有微不足道的解决方案。
我需要确定文件的字节大小。
编码语言为 C++,代码应适用于 Linux、windows 和任何其他操作系统。这意味着使用标准 C 或 C++ 函数/类。
这种微不足道的需求显然没有微不足道的解决方案。
使用 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();
您可以使用 stat 系统调用:
#ifdef WIN32
_stat64()
#else
stat64()
如果您只需要文件大小,这肯定是矫枉过正,但总的来说,我会使用Boost.Filesystem进行平台无关的文件操作。在它包含的其他属性函数中
template <class Path> uintmax_t file_size(const Path& p);
您可以在此处找到参考。尽管 Boost Libraries 可能看起来很大,但我发现它经常非常有效地实现事物。您也可以只提取您需要的功能,但这可能会很困难,因为 Boost 相当复杂。
简单:
std::ifstream ifs;
ifs.open("mybigfile.txt", std::ios::bin);
ifs.seekg(0, std::ios::end);
std::fpos pos = ifs.tellg();
通常我们希望以最便携的方式完成工作,但在某些情况下,尤其是这样的情况,我强烈建议使用系统 API 以获得最佳性能。
可移植性要求您使用最少的公分母,即 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;
}