两种方法获取文件大小:fseek与stat
需积分: 9 34 浏览量
更新于2024-09-21
收藏 5KB TXT 举报
"这篇文章主要介绍了如何在C语言中获取文件的大小,提供了两种不同的方法:一种是使用标准I/O库中的`fseek`和`ftell`函数,另一种是使用系统调用`stat`。这两种方法都可以有效地获取文件的字节数。"
在计算机编程中,特别是涉及到文件操作时,有时我们需要知道文件的大小,以便于处理或分配内存。本文将详细阐述两种在C语言中读取文件大小的方法。
1. 使用`fseek`和`ftell`:
这段代码首先打开文件(以只读模式“r”),然后使用`fseek`将文件位置指针移动到文件末尾,接着使用`ftell`获取当前位置,即文件的大小。最后关闭文件并返回文件大小。这种方法简单直接,但仅适用于可以被正常打开并读取的文件,且不考虑文件的特殊属性(如符号链接)。
```c
unsigned long get_file_size(const char* path) {
unsigned long file_size = -1;
FILE* fp;
fp = fopen(path, "r");
if (fp == NULL)
return file_size;
fseek(fp, 0L, SEEK_END);
file_size = ftell(fp);
fclose(fp);
return file_size;
}
```
2. 使用`stat`系统调用:
`stat`是一个强大的系统调用,它可以获取文件的各种元数据,包括文件大小。通过传递文件路径和一个`struct stat`缓冲区,`stat`函数会填充缓冲区的信息。在成功调用后,`st_size`成员就是文件的大小。这种方法不仅可以获取文件大小,还可以获取其他如文件类型、权限、修改时间等信息。
```c
#include <sys/stat.h>
unsigned long get_file_size(const char* path) {
unsigned long file_size = -1;
struct stat stat_buff;
if (stat(path, &stat_buff) < 0) {
return file_size;
} else {
file_size = stat_buff.st_size;
}
return file_size;
}
```
需要注意的是,`stat`系统调用可能失败,因此需要检查返回值。如果返回值小于0,表示调用失败,通常是因为文件不存在或没有权限访问。在成功的情况下,`st_size`字段包含文件的字节数。
此外,`stat`家族还包括`fstat`,它与`stat`类似,但作用于已打开的文件描述符,以及`lstat`,用于处理符号链接,不会递归地解析链接目标。
总结来说,C语言中获取文件大小有两种常见方法:一是通过标准I/O库,二是通过系统调用。每种方法都有其适用场景,选择哪种取决于具体需求,如是否需要获取更多文件元信息或者处理符号链接。在实际编程中,应根据项目需求和性能考虑来决定使用哪种方法。
318 浏览量
1051 浏览量
130 浏览量
1085 浏览量
180 浏览量
2024-11-05 上传
2023-04-06 上传
2013-05-30 上传
kfw1987
- 粉丝: 0
- 资源: 4
最新资源
- EasePDF - Free Online PDF Tools-crx插件
- codeforces_contest_scoreboard
- torch_cluster-1.5.5-cp38-cp38-win_amd64whl.zip
- config:适用于Node.js的简单Yaml Config
- 带筛选的垂直导航菜单展开收缩
- eclipase.rar
- 把握变革PPT
- perfin后端:轻松实现个人理财
- aqnfmzsxt3.gapyBRM
- RHTRH – Raise Hand To Raise Hand-crx插件
- torch_sparse-0.6.2-cp37-cp37m-linux_x86_64whl.zip
- tuk-power:演讲趋势和概念的硬件优化基准I
- 企业文化理论(12个文件)
- SpeechLib.rar
- JavaCryptoApp
- leetcodeGoogle:Google集合中的leetcode问题