C/C++ 三种方式获得文件的大小

您所在的位置:网站首页 怎样看压缩文件大小和大小 C/C++ 三种方式获得文件的大小

C/C++ 三种方式获得文件的大小

2023-07-31 06:18| 来源: 网络整理| 查看: 265

最近在做项目时经常需要获得文件的大小操作,虽然在网络上已经有许多篇博客介绍了,但是还是想总结出自己一篇,记录一下自己在项目中是怎么获得文件大小的!

方式一

推荐使用此方式获得文件大小! C/C++、Window、Linux 环境都可以使用!

通过结构体struct stat获得。

需要包含头文件:#include // 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) { /* 解释这里为什么用_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); /* 如果只是单纯的获取文件大小,后续没有对文件有其他操作,下面将文件指针移动回来的代码可以忽略 */ // 将文件光标位置从开头处移动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 #include #include

std::streampos getFileSize3(std::string fileName) { std::ifstream inFile; // 打开文件 inFile.open(fileName, std::ios::in); if (inFile.is_open() == false) { // 文件打开失败 std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3