C++通过文件指针获取文件大小的方法实现

更多python、PHP、JAVA、C、C++教程请到友情连接: 菜鸟教程https://www.piaodoo.com

茂名一技http://www.enechn.com

ppt制作教程步骤 http://www.tpyjn.cn

兴化论坛http://www.yimoge.cn

电白论坛 http://www.fcdzs.com

表格制作excel教程 http://www.tsgmyy.cn


学习通 http://www.hssi.net/


1. 叙述 

对于读取本地文件,很多时候需要预先知道本地文件的大小在进行读取。网上给出的方案是移动文件指针,计算文件头和文件尾的偏移,计算出文件的大小。但是我总觉得这样做可能会与读取文件一样消耗性能,为了解决这个问题,我写了如下例子验证了一下。

#include <iostream>
#include <fstream>
#include<Windows.h>

using namespace std;

class CTimer
{
public:
CTimer(void);
~CTimer(void);

int time_in();
double time_out();

private:
LARGE_INTEGER litmp;
LONGLONG qt1, qt2;
double dft, dff, dfm;
};

CTimer::CTimer(void)
{
}

CTimer::~CTimer(void)
{
}

int CTimer::time_in()
{
QueryPerformanceFrequency(&litmp);//获得时钟频率
dff = (double)litmp.QuadPart;

QueryPerformanceCounter(&amp;litmp);//获得初始值
qt1 = litmp.QuadPart;

return 1;

}

double CTimer::time_out()
{
QueryPerformanceCounter(&litmp);//获得终止值
qt2 = litmp.QuadPart;

dfm = (double)(qt2 - qt1);
dft = dfm / dff;//获得对应的时间值

return dft;

}

int main()
{
string file_name = “D:/Work/test.zip”;
CTimer timer;

ifstream ifs(file_name, std::ios::binary | std::ios::in);
if (!ifs.is_open())
{
	return 0;
}


timer.time_in();
ifs.seekg(0, std::ios::end);
int len = ifs.tellg();
ifs.seekg(0, std::ios::beg);
cout &lt;&lt; "获取文件长度耗时:" &lt;&lt; timer.time_out() &lt;&lt; "秒" &lt;&lt; endl;

timer.time_in();

char *buff = new char[len];

ifs.read(buff, len);
delete[]buff;

timer.time_out();
cout &lt;&lt; "读取文件耗时:" &lt;&lt; timer.time_out() &lt;&lt; "秒" &lt;&lt; endl;

return 1;

}

如上所示,我写了一个计时器,分别统计偏移文件指针计算文件长度与读取整个文件的耗时,运行结果如下:

2. 结论

可以看到,偏移文件指针带来的时间消耗非常小,几乎可以忽略不记。通过这个方法,不仅可以很快计算文件长度,还可以根据需要读取文件的特定位置,从而达到节省性能的目的。

到此这篇关于C++通过文件指针获取文件大小的方法实现的文章就介绍到这了,更多相关C++ 文件指针获取文件大小内容请搜索菜鸟教程www.piaodoo.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持菜鸟教程www.piaodoo.com!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值