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)計偏移文件指針計算文件長度與讀取整個文件的耗時,運行結果如下:
2. 結論
可以看到,偏移文件指針帶來的時間消耗非常小,幾乎可以忽略不記。通過這個方法,不僅可以很快計算文件長度,還可以根據(jù)需要讀取文件的特定位置,從而達到節(jié)省性能的目的。
到此這篇關于C++通過文件指針獲取文件大小的方法實現(xiàn)的文章就介紹到這了,更多相關C++ 文件指針獲取文件大小內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++ const的使用及this指針常方法(面試最愛問的this指針)
這篇文章主要介紹了C++ const的使用,this指針,常方法(面試最愛問的this指針),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置教程詳解
這篇文章主要介紹了Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置,CLion 是 JetBrains 推出的全新的 C/C++ 跨平臺集成開發(fā)環(huán)境,本文給大家介紹的非常詳細,需要的朋友可以參考下2020-08-08