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