0%

c语言 file如何判断文件是否存在

c语言中如何判断文件是否存在

一般情况下,我们可以使用函数stat(), access() 和fopen()来检验文件是否存在,但是由于文件权限的问题,有时可能不像结果所言,可能不是因为文件不存在,而是没有打开的权限。

函数fopen

通常情况下使用fopen主要用于读写文件,而我们就可以在这个上面做文章,通过以只读r的模式打开,如果失败,就是文件不存在咯。

1
2
3
4
5
6
7
8
9
10
11
FILE *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
4
int 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 <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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int 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来判断文件的存在与否。

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道