原文:http://www.programgo.com/article/52472798285/
前几天用c++写个小程序,需要想得到文件的大小,以前用的是c的办法。但是后面的文件操作都是用c++的io流做的,怕用c的FILE会有冲突,所以想用c++的方式实现,去网上一搜居然没有,全是用c和windows API的,难道c++这么强大的语言居然没这功能,不可能啊,翻出《c++标准程序库》重看了一下fstream的内容,才找到了答案。不过书中也没有直接的计算文件大小的函数。只有操作流的读写位置的方法。模仿c中的思路,计算文件结尾的读写位置减去文件起始的读写位置就是文件的字节数。
unsigned int GetFileLength(ifstream &f)
{
ifstream::pos_type old=f.tellg();
f.seekg(0,ifstream::beg);
ifstream::pos_type start=f.tellg();
f.seekg(0,ifstream::end);
ifstream::pos_type end=f.tellg();
f.seekg(old);
return end-start;
}
不过文件流要以二进制的方式打开
ifstream f("zqc.torrent",ifstream::binary);
cout<<GetFileLength(f);
补充:
另一种易懂的方法:先通过tellg()函数获取文件指针的位置,然后后通过seekg函数将文件指针移到文件末尾,在通过tellg函数获取文件指针的位置,此时的文件位置就是文件的长度,最后通过seekg函数将文件指针位置恢复到原来的位置。
long GetFileLength(ifstream&ifs){
long tmppos;
long respos;
tmppos=ifs.tellg();//先保存最初位置
ifs.seekg(0,ios::end);//将指针移到未见末尾
respos=ifs.tellg();//保存末尾位置,即为文件大小
ifs.seekg(tmppos,ios::beg);//恢复文件指针
return respos; //返回文件大小
}