c语言中如何判断文件是否存在
一般情况下,我们可以使用函数stat(), access() 和fopen()来检验文件是否存在,但是由于文件权限的问题,有时可能不像结果所言,可能不是因为文件不存在,而是没有打开的权限。
函数fopen
通常情况下使用fopen主要用于读写文件,而我们就可以在这个上面做文章,通过以只读r的模式打开,如果失败,就是文件不存在咯。
1 | FILE *fp; |
也可以写个子函数:
1 | //存在返回0,不存在返回1 |
函数access
设计的子函数为:
1 | int file_exists(char *filename) |
access(filename, 0)0 表示判断文件是否存在
finename 文件名称 ,mode 模式,共5种模式:
- 0-检查文件是否存在
- 1-检查文件是否可运行
- 2-检查文件是否可写访问
- 4-检查文件是否可读访问
- 6-检查文件是否可读/写访问
注意,有的不适用数字表示,比如文件是否存在使用模式F_OK,类似的R_OK、W_OK和X_OK分别表示读写和可执行模式。
函数stat
stat函数可以获取文件的属性:
·表头文件: #include <sys/stat.h>
·函数定义: int stat(const char *file_name, struct stat *buf);
·函数说明: 通过文件名filename获取文件信息,并保存在buf所指的结构体stat中
·返回值: 执行成功则返回0,失败返回-1,错误代码存于errno(需要include <errno.h>)
因此如果文件存在,该函数将返回0,否则返回1。利用stat()函数来判断文件是否存在的代码如下:
1 | int cfileexists(const char* filename){ |
函数lstat
与stat函数比较类似,除了在符号链接的时候有点小差别。
函数open
对比与fopen,我们也可以使用open来判断文件的存在与否。