C++通過文件指針獲取文件大小的方法實(shí)現(xiàn)
1. 敘述
對于讀取本地文件,很多時候需要預(yù)先知道本地文件的大小在進(jìn)行讀取。網(wǎng)上給出的方案是移動文件指針,計(jì)算文件頭和文件尾的偏移,計(jì)算出文件的大小。但是我總覺得這樣做可能會與讀取文件一樣消耗性能,為了解決這個問題,我寫了如下例子驗(yàn)證了一下。
#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;//獲得對應(yīng)的時間值 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; }
如上所示,我寫了一個計(jì)時器,分別統(tǒng)計(jì)偏移文件指針計(jì)算文件長度與讀取整個文件的耗時,運(yùn)行結(jié)果如下:
2. 結(jié)論
可以看到,偏移文件指針帶來的時間消耗非常小,幾乎可以忽略不記。通過這個方法,不僅可以很快計(jì)算文件長度,還可以根據(jù)需要讀取文件的特定位置,從而達(dá)到節(jié)省性能的目的。
到此這篇關(guān)于C++通過文件指針獲取文件大小的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C++ 文件指針獲取文件大小內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
OpenCV實(shí)現(xiàn)視頻綠幕背景替換功能的示例代碼
這篇文章主要介紹了如何利用OpenCV實(shí)現(xiàn)視頻綠幕背景替換功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)OpenCV有一定的幫助,感興趣的可以學(xué)習(xí)一下2023-02-02C語言結(jié)構(gòu)體數(shù)組常用的三種賦值方法(包含字符串)
C語言只有在定義字符數(shù)組的時候才能用“=”來初始化變量,其它情況下是不能直接用“=”來為字符數(shù)組賦值的,下面這篇文章主要給大家介紹了關(guān)于C語言結(jié)構(gòu)體數(shù)組常用的三種賦值方法,需要的朋友可以參考下2022-06-06C++ const的使用及this指針常方法(面試最愛問的this指針)
這篇文章主要介紹了C++ const的使用,this指針,常方法(面試最愛問的this指針),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置教程詳解
這篇文章主要介紹了Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置,CLion 是 JetBrains 推出的全新的 C/C++ 跨平臺集成開發(fā)環(huán)境,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-08-08Qt學(xué)習(xí)之QListWidget控件的使用教程詳解
這篇文章主要為大家詳細(xì)介紹了Qt中QListWidget控件的使用教程,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Qt有一定的幫助,需要的可以參考一下2022-12-12C語言實(shí)現(xiàn)循環(huán)單鏈表的示例代碼
這篇文章主要給大家詳細(xì)介紹了C語言如何實(shí)現(xiàn)循環(huán)單鏈表,文章通過代碼示例講解的非常詳細(xì),對我們的學(xué)習(xí)或工作有一定的參考價(jià)值,感興趣的小伙伴跟著小編一起來看看吧2023-08-08