最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++通過文件指針獲取文件大小的方法實現(xiàn)

 更新時間:2022年01月05日 10:08:43   作者:charlee44  
本文主要介紹了C++通過文件指針獲取文件大小的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

1. 敘述 

對于讀取本地文件,很多時候需要預先知道本地文件的大小在進行讀取。網(wǎng)上給出的方案是移動文件指針,計算文件頭和文件尾的偏移,計算出文件的大小。但是我總覺得這樣做可能會與讀取文件一樣消耗性能,為了解決這個問題,我寫了如下例子驗證了一下。

#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;
}

如上所示,我寫了一個計時器,分別統(tǒng)計偏移文件指針計算文件長度與讀取整個文件的耗時,運行結(jié)果如下:

2. 結(jié)論

可以看到,偏移文件指針帶來的時間消耗非常小,幾乎可以忽略不記。通過這個方法,不僅可以很快計算文件長度,還可以根據(jù)需要讀取文件的特定位置,從而達到節(jié)省性能的目的。

到此這篇關于C++通過文件指針獲取文件大小的方法實現(xiàn)的文章就介紹到這了,更多相關C++ 文件指針獲取文件大小內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言 淺談棧與隊列的定義與操作

    C語言 淺談棧與隊列的定義與操作

    棧和隊列,嚴格意義上來說,也屬于線性表,因為它們也都用于存儲邏輯關系為 "一對一" 的數(shù)據(jù),但由于它們比較特殊,因此將其單獨作為一章,做重點講解
    2021-11-11
  • C和指針小結(jié)(推薦)

    C和指針小結(jié)(推薦)

    下面小編就為大家?guī)硪黄狢和指針小結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考,一起跟隨小編過來看看吧
    2016-06-06
  • OpenCV通過透視變換實現(xiàn)矯正圖像詳解

    OpenCV通過透視變換實現(xiàn)矯正圖像詳解

    這篇文章主要為大家詳細介紹了OpenCV如何通過透視變換實現(xiàn)將一張折射的圖片給矯正過來,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-02-02
  • C++中stringstream的用法和實例

    C++中stringstream的用法和實例

    下面小編就為大家?guī)硪黄狢++中stringstream的用法和實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++ Boost Heap使用實例詳解

    C++ Boost Heap使用實例詳解

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • C++標準模版庫(STL)之vector容器詳解

    C++標準模版庫(STL)之vector容器詳解

    vector的功能和水桶一樣,就是用來裝東西的,并且vector還提供了迭代器來很方便的訪問這些數(shù)據(jù),下面就讓我們一起看下如何使用C++的vector吧
    2023-03-03
  • Qt中線程常用通信方式介紹

    Qt中線程常用通信方式介紹

    Qt中,線程通信無處不在,最核心的特性信號槽就是一種線程間通信,這篇文章主要為大家介紹了幾種常用的方式,需要的小伙伴可以參考一下
    2025-01-01
  • C語言函數(shù)指針詳解

    C語言函數(shù)指針詳解

    大家好,本篇文章主要講的是C語言函數(shù)指針詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C++ 頭文件系列(set)詳解

    C++ 頭文件系列(set)詳解

    一般而言,每個C++/C程序通常由頭文件和定義文件組成。頭文件作為一種包含功能函數(shù)、數(shù)據(jù)接口聲明的載體文件,主要用于保存程序的聲明,而定義文件用于保存程序的實現(xiàn) 。
    2017-02-02
  • win10中的dlib庫安裝過程

    win10中的dlib庫安裝過程

    這篇文章主要介紹了win10中dlib庫的安裝過程,本文通過實例圖文介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03

最新評論

南乐县| 宁国市| 扶风县| 陈巴尔虎旗| 福清市| 寻乌县| 区。| 合肥市| 聂拉木县| 鹤峰县| 永善县| 克什克腾旗| 怀远县| 信宜市| 七台河市| 丰原市| 广平县| 新沂市| 贵溪市| 西平县| 通许县| 兰溪市| 淮安市| 盐山县| 道孚县| 湾仔区| 潼南县| 章丘市| 颍上县| 美姑县| 岐山县| 石泉县| 格尔木市| 县级市| 同德县| 格尔木市| 从江县| 唐河县| 黄龙县| 雷州市| 望谟县|