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

目录
  • 1. 叙述
  • 2. 结论

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++ 文件指针获取文件大小内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++获取文件大小的4种常见技巧分享

    C++编程语言在程序开发应用中能够帮助我们轻松的完成许多功能需求.比如今天为大家介绍的C++获取文件大小的方法,就可以以多种方式轻松的实现.现在将会实现方法呈现给大家,以便大家参考. C++获取文件大小代码示例: #include < iostream> #include < io.h> #include < sys\stat.h> #include < afx.h> #define _AFXDLL using namespace std; void mai

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

    目录 1. 叙述 2. 结论 1. 叙述 对于读取本地文件,很多时候需要预先知道本地文件的大小在进行读取.网上给出的方案是移动文件指针,计算文件头和文件尾的偏移,计算出文件的大小.但是我总觉得这样做可能会与读取文件一样消耗性能,为了解决这个问题,我写了如下例子验证了一下. #include <iostream> #include <fstream> #include<Windows.h> using namespace std; class CTimer { publi

  • js+ajax实现获取文件大小的方法

    本文实例讲述了js+ajax实现获取文件大小的方法.分享给大家供大家参考,具体如下: 顾名思义,通过JS和Ajax来获取上传文件的大小,在上传之前可以有个判断,对上传的文件有所控制,因为js控制文件大小(JS获取文件大小)有些问题,具体大家试下就知道了,在此整理了一下ajax的获取文件大小的方法,比较好用,再调试过程中,出现了c:/fakepath/ 的错误,也将解决方案罗列在下面,以供大家参考 废话少说,代码如下 JS如下: <script language="Jscript"

  • VB获取文件大小的方法

    本文实例讲述了VB获取文件大小的方法.分享给大家供大家参考.具体实现方法如下: <% ' Copyright (c) 2009, reusablecode.blogspot.com; some rights reserved. ' ' This work is licensed under the Creative Commons Attribution License. To view ' send a letter to Creative Commons, 559 Nathan Abbott

  • JS使用ajax从xml文件动态获取数据显示的方法

    本文实例讲述了JS使用ajax从xml文件动态获取数据显示的方法.分享给大家供大家参考.具体分析如下: 下面的JS代码通过ajax检索xml文件的内容动态展示到网页,真个页面无刷新 <!DOCTYPE html> <html> <head> <script> function loadXMLDoc(url) { var xmlhttp; var txt,x,xx,i; if (window.XMLHttpRequest) {// code for IE7+,

  • php获取文件大小的方法

    复制代码 代码如下: static function convert($size) {         $unit=array('b','kb','mb','gb','tb','pb');         return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];     } 也可用下面这种方法 复制代码 代码如下: /** * Returns a human readable filesize */fu

  • java获取文件大小的几种方法

    目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.io.*中FileInputStream的available()方法和新的java..nio.*中的FileChannel 下面依次介绍这几种方法: 首先选择一个文件并查看这个文件在windows中显示的大小,为了测试准确性,我这里选取了一个大文件(超过2GB) 查看这个文件在windows中显示的大小: 使用在线转换工具将其转换成字节: 可以看

  • Javascript 使用ajax与C#获取文件大小实例详解

    Javascript ajax实现获取文件大小的方法. 顾名思义,通过JS和Ajax来获取上传文件的大小,在上传之前可以有个判断,对上传的文件有所控制,因为js控制文件大小(JS获取文件大小)有些问题,具体大家试下就知道了,在此整理了一下ajax的获取文件大小的方法,比较好用,再调试过程中,出现了c:/fakepath/ 的错误,也将解决方案罗列在下面,以供大家参考 废话少说,代码如下 JS如下: <script language="Jscript"> function c

  • C++文件的数据写入和文件的数据读取的方法实现

    目录 一:没有数据,准备数据,写入文件 二:读文件操作 一:没有数据,准备数据,写入文件 1.main.cpp #include<iostream> using namespace std; #include<fstream> #include<string> #include<list> #include"CData.h" #include"CStaff.h" int main() { CData::userInit

  • JS获取文件大小方法小结

    本文实例总结了JS获取文件大小方法.分享给大家供大家参考,具体如下: 方法一,利用ActiveX控件实现: <script type="text/javascript"> function getFileSize(filePath) { var fso = new ActiveXObject("Scripting.FileSystemObject"); alert("文件大小为:"+fso.GetFile(filePath).size

随机推荐