广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++获取文件大小数值的三种方式介绍
  • 932
分享到

C++获取文件大小数值的三种方式介绍

2024-04-02 19:04:59 932人浏览 八月长安
摘要

目录方式一方式二方式三总结方式一 推荐使用此方式获得文件大小! C/C++、Window、linux 环境都可以使用! 通过结构体struct stat获得。 需要包含头文件:#in

方式一

推荐使用此方式获得文件大小!

C/C++、Window、linux 环境都可以使用!

通过结构体struct stat获得。

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

// 通过stat结构体 获得文件大小,单位字节
size_t getFileSize1(const char *fileName) {
	if (fileName == NULL) {
		return 0;
	}
	// 这是一个存储文件(夹)信息的结构体,其中有文件大小和创建时间、访问时间、修改时间等
	struct stat statbuf;
	// 提供文件名字符串,获得文件属性结构体
	stat(fileName, &statbuf);
	// 获取文件大小
	size_t filesize = statbuf.st_size;
	return filesize;
}

首先也是通过stat函数获得文件的基本属性,然后再从结构体中直接进行获取文件大小就行,很简单,也很好用。

直接拷贝代码到自己的项目中去就可以用了!

方式二

C语言方式获得文件大小

不推荐使用此方式

当文件太大时,移动文件光标指针会非常耗时!

// 通过打开文件 获得文件大小,单位字节
long long getFileSize2(const char *fileName) {
	
	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);
	
	// 将文件光标位置从开头处移动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,返回的数据可能会不准确!

通过移动文件光标的方式获得文件大小。

首先将文件光标移动到文件末尾,然后获取文件光标的位置,也就是获得文件的大小,获取后再将文件光标移动回文件开头即可!

如果只是单纯的获取文件大小,后续没有对文件有其他操作,将文件指针移动回来的代码可以忽略。

直接拷贝代码到自己的项目中去就可以用了!

方式三

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

--结束END--

本文标题: C++获取文件大小数值的三种方式介绍

本文链接: https://www.lsjlt.com/news/168985.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作