我正在尝试在C应用程序中打开一个文件。在尝试读取文件之前,我该如何检查该文件是否存在?
FILE * file;
file = fopen("file_name", "r");
if (file){
//file exists and can be opened
//...
// close file when you're done
fclose(file);
}else{
//file doesn't exists or cannot be opened (es. you don't have access permission)
}
fclose(file)
关闭流(stream),如果它确实存在的话。当你只是想查看文件是否打开时,很容易忘记关闭流,但如果你不这样做,那么你的应用程序和其他应用程序都将无法打开该文件,直到你的应用程序退出等。这是为了防止多个程序同时对同一文件进行写操作,因为这样做没有任何意义。 - rsethcstat()
,检查返回代码,它没有副作用。在UNIX上,也要调用access()
。stat
,你可以检查st_mode
以进行访问。然而,由于你打算打开文件,fopen
或open
可能是你想要的。stat
并不是什么晦涩难懂的东西。Unix 不是 Stack Overflow 上首选的操作系统。但除非提问者要求特定操作系统,否则与最常用的操作系统(即 *NIX 和 Windows)相关的答案应该是很好的答案。 - netcoderbool file_exists(const char * filename) {
if (FILE * file = fopen(filename, "r")) {
fclose(file);
return true;
}
return false;
}
stat
。 - Steve Jessop您需要检查fopen
的结果。
FILE *fp;
if (!(fp = fopen(name, "r"))) {
perror("fopen");
/* Handle error, return, exit, try again etc. */
}
/* Normal code goes on. */
fopen
返回NULL
,则文件由于某种原因不可访问。可能是缺失或者进程没有权限。errno
的值以了解fopen
失败的原因;如果文件不存在,则为ENOENT
。 - Fred Foofopen()
或open()
的返回值。