C语⾔中如何判断⽂件是否存在
⽅法⼀:access函数判断⽂件夹或者⽂件是否存在
函数原型: int access(const char *filename, int mode);
所属头⽂件:io.h
filename:可以填写⽂件夹路径或者⽂件路径
mode:0 (F_OK)只判断是否存在
2 (R_OK)判断写⼊权限
4 (W_OK)判断读取权限
6 (X_OK)判断执⾏权限
⽤于判断⽂件夹是否存在的时候,mode取0,判断⽂件是否存在的时候,mode可以取0、2、4、6。若存在或者具有权限,返回值为0;不存在或者⽆权限,返回值为-1。
错误代码
EACCESS 参数pathname 所指定的⽂件不符合所要求的权限。
EROFS 欲测试写⼊权限的⽂件存在于只读⽂件系统内。
EFAULT 参数pathname指针超出可存取内存空间。
EINVAL 参数mode 不正确。
ENAMETOOLONG 参数pathname太长。
ENOTDIR 参数pathname为⼀⽬录。
ENOMEM 核⼼内存不⾜
ELOOP 参数pathname有过多符号连接问题。
EIO I/O 存取错误。
特别提醒:使⽤access()作⽤户认证⽅⾯的判断要特别⼩⼼,例如在access()后再做open()的空⽂件可能会造成系统安全上的问题。
实例:
1 #include <stdio.h>
2
3 #include <io.h>
4
fopen中文路径问题5int main(void)
6
7 {
8
9if ( !access("C://windows",0) )
10
11          puts("C://windows EXISITS!");
12
13else
14
15          puts("C://windows DOESN'T EXISIT!");
16
17return0;
18
19 }
⽅法⼆:fopen函数判断⽂件是否存在
函数原型:FILE *fopen (char *filename, char *type);
filename:⽂件路径
type:打开⽂件的⽅式(有r、w、r+、w+、a、rb、wb等等)
⽤于判断⽂件是否存在可以使⽤ r 或者 rb ,因为使⽤其它⽅式的话,可能会⾃动建⽴⽂件。返回值为NULL(打不开)和正数(能打开)。
特别提醒:⽤这种⽅法做出的判断是不完全正确的,因为有的⽂件存在,但是可能不可读。