返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >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://lsjlt.com/news/168985.html(转载时请注明来源链接)

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

猜你喜欢
  • C++获取文件大小数值的三种方式介绍
    目录方式一方式二方式三总结方式一 推荐使用此方式获得文件大小! C/C++、Window、Linux 环境都可以使用! 通过结构体struct stat获得。 需要包含头文件:#in...
    99+
    2024-04-02
  • Java中获取键盘输入值的三种方法介绍
    程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决...
    99+
    2023-05-30
    java 获取输入 ava
  • java获取文件大小的几种方法
    目前Java获取文件大小的方法有两种:通过file的length()方法获取;通过流式方法获取;通过流式方法又有两种,分别是旧的java.io.*中FileInputStream的available()方法和新的java..nio.*中的F...
    99+
    2023-05-31
    java 文件大小 ava
  • C#三种方法获取文件的Content-Type(MIMEType)
    什么是ContentType 我们知道浏览器可以处理各种各样的内容,比如:HTML、XML、JPG、Flash等等,那么浏览器是如何区分它们的呢?答案就是MIME Type,即资源的...
    99+
    2024-04-02
  • 在C++中获取文件大小的方式有哪些
    这篇文章给大家介绍在C++中获取文件大小的方式有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++获取文件大小代码示例:#include < iostream> #inc...
    99+
    2023-06-06
  • Python 获取线程返回值的三种方式
    提到线程,你的大脑应该有这样的印象:我们可以控制它何时开始,却无法控制它何时结束,那么如何获取线程的返回值呢?今天就分享一下自己的一些做法。方法一:使用全局变量的列表,来保存返回值ret_values = [] def thread_fu...
    99+
    2023-05-14
    Python CPython 返回值
  • JavaScript三种获取URL参数值的方法
    目录前言URLSearchParamsURL纯JS前言 在 URL 中,查询参数字符串值通常提供有关请求的信息,例如搜索参数或正在使用的对象的 ID。如果在前端处理任何业务或请求逻辑...
    99+
    2024-04-02
  • Node.js读取文件的三种方式
    本篇内容介绍了“Node.js读取文件的三种方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!学习 Nod...
    99+
    2024-04-02
  • SpringRedisTemplate批量获取值的2种方式小结
    目录Spring RedisTemplate 批量获取值1、利用mGet2、利用PipeLineJava对Redis的批量操作RedisTemplate1、背景2、操作3、说明Spr...
    99+
    2024-04-02
  • 详解Python获取线程返回值的三种方式
    目录方法一方法二方法三最后的话提到线程,你的大脑应该有这样的印象:我们可以控制它何时开始,却无法控制它何时结束,那么如何获取线程的返回值呢?今天就分享一下自己的一些做法。 方法一 使...
    99+
    2024-04-02
  • java获取word文件页数的3种方式
    doc、docx页码跟系统字体,渲染方式有关,需要预览,或则转成pdf才能知道最终页数。 pdf页码是个属性,可以直接读取,获取比较容易。 poi获取 import java.io.File;import java.io.FileInput...
    99+
    2023-09-08
    word java
  • C++通过文件指针获取文件大小的方法实现
    目录1. 叙述 2. 结论1. 叙述  对于读取本地文件,很多时候需要预先知道本地文件的大小在进行读取。网上给出的方案是移动文件指针,计算文件头和文件尾的偏移,计...
    99+
    2024-04-02
  • js获取url参数值的两种方式
    方法一:正则分析法 复制代码 代码如下: function getQueryString(name) { var reg = new RegExp("(^|&)" + nam...
    99+
    2022-11-15
    js url参数
  • php获取文件扩展名的三种方法
    在php开发过程中,获取文件扩展名是非常常见的需求。比如我们在上传文件的时候,首先需要判断文件类型是否为我们允许上传的类型。这个时候就需要使用php来获取文件的后缀或者说扩展名。 本文中,我们介绍三种php获取文件扩展名的方法 方法一:使用...
    99+
    2023-09-28
    php 开发语言
  • C#获取XML文件内容的多种方式总结
    目录C#获取XML文件内容的方式一、读取外部的XML文件方法二、读取内部XML文件方法三、读取类库中XML文件的方法四、读取程序内添加的外部可见的XML文件总结C#获取XML文件内容...
    99+
    2023-01-28
    C# XML文件 C#获取XML文件 C#获取XML方式
  • C#获取文件名和文件路径的两种实现方式
    目录C#获取文件名和文件路径方法一方法二C#通过文件路径获取文件名小技巧C#获取文件名和文件路径 方法一 OpenFileDialog open = new OpenFileDia...
    99+
    2024-04-02
  • CZGL.ProcessMetrics处理监控数据的三种方式介绍
    目录导读三种方式处理监控数据主动推送ASP.NET Core自定义URL.NET diagnostics自定义监控指标导读 CZGL.ProcessMetrics 是一个 Metri...
    99+
    2024-04-02
  • 在Python中获取文件的大小4种办法
    在Python中获取文件的大小4种办法 这篇文章将讨论如何在 Python 中获取文件的大小。 1.使用 os.stat() 功能 获取文件状态的标准解决方案是使用 os.stat() Python ...
    99+
    2023-09-03
    python 前端 javascript
  • C#中数组扩容的几种方式介绍
    假设有一个规定长度的数组,如何扩容呢?最容易想到的是通过如下方式扩容: class Program { static void Main(string...
    99+
    2024-04-02
  • PHP 求取数组大小的几种方式
    标题:PHP 求取数组大小的几种方式 在 PHP 编程中,经常会遇到需要获取数组大小的情况。本文将介绍几种常用的方法来求取数组的大小,包括使用 count() 函数、sizeof() ...
    99+
    2024-03-13
    计算数组长度 php 数组大小 获取数组元素数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作