添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

作者:charlee44

本文主要介绍了C++通过文件指针获取文件大小的方法实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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(&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;

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

2. 结论

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

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

您可能感兴趣的文章:
  • C语言枚举与联合体深入详解
    C语言枚举与联合体深入详解
    2022-09-09
  • 详解C语言内核中的链表与结构体
    详解C语言内核中的链表与结构体
    2022-09-09
  • LeetCode题解C++生成每种字符都是奇数个的字符串
    LeetCode题解C++生成每种字符都是奇数个的字符串
    2022-10-10
  • 一文搞懂C++中的运算符重载
    一文搞懂C++中的运算符重载
    2022-09-09
  • ubuntu20.04中vscode使用ROS的详细方法
    ubuntu20.04中vscode使用ROS的详细方法
    2022-09-09
  • C语言实现飞机游戏(进阶版)的示例代码
    C语言实现飞机游戏(进阶版)的示例代码
    2022-09-09
  • 利用C语言实现一个最简单的飞机游戏
    利用C语言实现一个最简单的飞机游戏
    2022-09-09
  • C++实现简易反弹小球游戏的示例代码
    C++实现简易反弹小球游戏的示例代码
    2022-09-09
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2024 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号