我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

方式一

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

Java中获取键盘输入值的三种方法介绍

程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决
2023-05-30

java获取文件大小的几种方法

目前Java获取文件大小的方法有两种:1、通过file的length()方法获取;2、通过流式方法获取;通过流式方法又有两种,分别是旧的java.io.*中FileInputStream的available()方法和新的java..nio.
2023-05-31

在C++中获取文件大小的方式有哪些

这篇文章给大家介绍在C++中获取文件大小的方式有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++获取文件大小代码示例:#include < iostream> #include < io.h> #include
2023-06-06

C#获取XML文件内容的多种方式总结

这篇文章主要介绍了C#获取XML文件内容的多种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录