通过一个实例介绍了C++通过文件指针获取文件大小的方法。
目录
- 1. 叙述
- 2. 结论
对于读取本地文件,很多时候需要预先知道本地文件的大小在进行读取。网上给出的方案是移动文件指针,计算文件头和文件尾的偏移,计算出文件的大小。但是我总觉得这样做可能会与读取文件一样消耗性能,为了解决这个问题,我写了如下例子验证了一下。
#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(&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 << "获取文件长度耗时:" << timer.time_out() << "秒" << endl;
timer.time_in();
char *buff = new char[len];
ifs.read(buff, len);
delete[]buff;
timer.time_out();
cout << "读取文件耗时:" << timer.time_out() << "秒" << endl;
return 1;
}