基于c++标准库计算文件大小

原文: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;  //返回文件大小
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值