亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++獲取文件大小數值的三種方式介紹

 更新時間:2022年10月09日 09:47:44   作者:cpp_learners  
最近在做項目時經常需要獲得文件的大小操作,雖然在網絡上已經有許多篇博客介紹了,但是還是想總結出自己一篇,記錄一下自己在項目中是怎么獲得文件大小的

方式一

推薦使用此方式獲得文件大??!

C/C++、Window、Linux 環(huán)境都可以使用!

通過結構體struct stat獲得。

需要包含頭文件:#include <sys/stat.h> // struct stat

// 通過stat結構體 獲得文件大小,單位字節(jié)
size_t getFileSize1(const char *fileName) {
	if (fileName == NULL) {
		return 0;
	}
	// 這是一個存儲文件(夾)信息的結構體,其中有文件大小和創(chuàng)建時間、訪問時間、修改時間等
	struct stat statbuf;
	// 提供文件名字符串,獲得文件屬性結構體
	stat(fileName, &statbuf);
	// 獲取文件大小
	size_t filesize = statbuf.st_size;
	return filesize;
}

首先也是通過stat函數獲得文件的基本屬性,然后再從結構體中直接進行獲取文件大小就行,很簡單,也很好用。

直接拷貝代碼到自己的項目中去就可以用了!

方式二

C語言方式獲得文件大小

不推薦使用此方式

當文件太大時,移動文件光標指針會非常耗時!

// 通過打開文件 獲得文件大小,單位字節(jié)
long long getFileSize2(const char *fileName) {
	/* 
		解釋這里為什么用_fseeki64而不用fseek:
			_fseeki64可以兼容x64項目和x86項目
			fseek只能兼容x86項目

		這里說的兼容并不是能不能用的問題,而是準不準確的問題!
		在x64項目使用fseek,返回的數據可能會不準確!
	*/
	if (fileName == NULL) {
		return -1;
	}
	FILE *fp = NULL;
	long long fileSize = 0;
	// 打開文件
	errno_t err = fopen_s(&fp, fileName, "r");
	if (err != 0) {	// 不等0,打開文件失敗
		printf("Open file %s fail, code %d \n", fileName, err);
		return -1;
	}
	// 將文件光標位置從末尾處移動0個位置 -->也可以這樣說:(將文件光標從開頭位置移動到末尾位置)
	int errer = _fseeki64(fp, 0, SEEK_END);
	if (err != 0) {	// 不等0,移動文件光標失敗
		printf("Failed to move cursor!(SEEK_END)\n");
		return -1;
	}
	// 獲得當前文件指針位置,也就是間接獲得文件大小
	fileSize = _ftelli64(fp);
	/* 如果只是單純的獲取文件大小,后續(xù)沒有對文件有其他操作,下面將文件指針移動回來的代碼可以忽略 */
	// 將文件光標位置從開頭處移動0個位置 -->也可以這樣說:(將文件光標從末尾位置移動到開頭位置)
	errer = _fseeki64(fp, 0, SEEK_SET);
	if (err != 0) {	// 不等0,移動文件光標失敗
		printf("Failed to move cursor!(SEEK_SET)\n");
		return -1;
	}
	// 關閉文件
	fclose(fp);
	return fileSize;
}

解釋這里為什么用_fseeki64而不用fseek:

_fseeki64可以兼容x64項目和x86項目

fseek只能兼容x86項目

這里說的兼容并不是能不能用的問題,而是準不準確的問題!

在x64項目使用fseek,返回的數據可能會不準確!

通過移動文件光標的方式獲得文件大小。

首先將文件光標移動到文件末尾,然后獲取文件光標的位置,也就是獲得文件的大小,獲取后再將文件光標移動回文件開頭即可!

如果只是單純的獲取文件大小,后續(xù)沒有對文件有其他操作,將文件指針移動回來的代碼可以忽略。

直接拷貝代碼到自己的項目中去就可以用了!

方式三

C++ 方式獲得文件大小

不推薦使用此方式

當文件太大時,移動文件光標指針會非常耗時!

需要包含頭文件:

#include <iostream>

#include <fstream>

#include <string>

std::streampos getFileSize3(std::string fileName) {
	std::ifstream inFile;
	// 打開文件
	inFile.open(fileName, std::ios::in);
	if (inFile.is_open() == false) {	// 文件打開失敗
		std::cout << "Open file " << fileName << " fail!" << std::endl;
		return -1;
	}
	// 文件指針移動到末尾位置
	inFile.seekg(0, std::ios_base::end);
	// 獲取當前文件指針位置,也就是獲得文件大小
	std::streampos fileSize = inFile.tellg();
	// 文件指針移動到開頭文件
	inFile.seekg(0, std::ios_base::beg);
	// 關閉文件
	inFile.close();
	return fileSize;
}

其獲取思路和C語言類似!

都是通過移動文件光標指針獲得!

直接拷貝代碼到自己的項目中去就可以用了!

總結

在項目中,我還是比較喜歡使用第一種方式,因為其代碼量少,且獲取速度快,我可以不定義函數直接拷貝那幾句代碼到項目中去就可以使用了,很方便,省去了打開文件的操作!

到此這篇關于C++獲取文件大小數值的三種方式介紹的文章就介紹到這了,更多相關C++獲取文件大小內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • c++如何將一個char轉化為string

    c++如何將一個char轉化為string

    這篇文章主要介紹了c++如何將一個char轉化為string問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 利用C++實現(xiàn)獲取文件夾下所有文件名

    利用C++實現(xiàn)獲取文件夾下所有文件名

    這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)獲取文件夾下所有文件名,文中的示例代碼講解詳細,對我們學習C++有一定幫助,需要的可以參考一下
    2022-09-09
  • C++11 并發(fā)指南之多線程初探

    C++11 并發(fā)指南之多線程初探

    這篇文章主要介紹了C++11 并發(fā)指南之多線程初探,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 淺談C++日志系統(tǒng)log4cxx的使用小結詳解

    淺談C++日志系統(tǒng)log4cxx的使用小結詳解

    本篇文章是對C++日志系統(tǒng)log4cxx的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言中全局變量,局部變量,靜態(tài)局部變量的區(qū)分方式

    C語言中全局變量,局部變量,靜態(tài)局部變量的區(qū)分方式

    這篇文章主要介紹了C語言中全局變量,局部變量,靜態(tài)局部變量的區(qū)分方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • C語言結構體的全方面解讀

    C語言結構體的全方面解讀

    C 數組允許定義可存儲相同類型數據項的變量,結構是 C 編程中另一種用戶自定義的可用的數據類型,它允許你存儲不同類型的數據項
    2021-10-10
  • C++超詳細梳理基礎知識

    C++超詳細梳理基礎知識

    這篇文章主要介紹了C++基礎概念,? 本次為C++的一個開篇,重點是更好的理解C++相對于其他編程語言的一個特性,之后會持續(xù)更新,本次專欄計劃是掌握C++的基礎語法以及常用特性,并且從細節(jié)上去理解,需要的朋友可以參考一下
    2022-06-06
  • Opencv基于文字檢測去圖片水印的實現(xiàn)示例

    Opencv基于文字檢測去圖片水印的實現(xiàn)示例

    去水印是個麻煩事,本文就來介紹一種方法Opencv基于文字檢測去圖片水印的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • va_list(),va_start(),va_arg(),va_end() 詳細解析

    va_list(),va_start(),va_arg(),va_end() 詳細解析

    這些宏定義在stdarg.h中,所以用到可變參數的程序應該包含這個頭文件.下面我們寫一個簡單的可變參數的函數,該函數至少有一個整數參數,第二個參數也是整數,是可選的.函數只是打印這兩個參數的值
    2013-09-09
  • C語言實現(xiàn)AT指令ASCII碼的拼接處理流程

    C語言實現(xiàn)AT指令ASCII碼的拼接處理流程

    今天小編就為大家分享一篇關于C語言實現(xiàn)AT指令ASCII碼的拼接處理流程,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評論