我正在尝试在C应用程序中打开一个文件。在尝试读取文件之前,如何检查文件是否存在?
答案 0 :(得分:12)
尝试打开它:
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 )
}
答案 1 :(得分:7)
存在:调用stat()
,检查返回码,没有副作用。在UNIX上,也请调用access()
。
如果你只是按照你的要求做事,你会这样做,FileA是否存在,不一定能打开它。示例:在UNIX中,具有只执行权限的文件将无法打开,但仍然存在。
使用stat
,您可以检查st_mode的访问权限。但是,由于您打算打开文件,fopen
或open
可能就是您想要的。
答案 2 :(得分:3)
你可以这样做:
bool file_exists(const char * filename) {
if (FILE * file = fopen(filename, "r")) {
fclose(file);
return true;
}
return false;
}
基本上只需打开文件并检查它是否成功。
答案 3 :(得分:2)
您应该检查fopen
的结果。
FILE *fp;
if (!(fp = fopen(name, "r"))) {
perror("fopen");
/* Handle error, return, exit, try again etc. */
}
/* Normal code goes on. */
如果fopen
返回NULL
,则该文件由于某种原因无法访问。它可能会丢失,或者进程可能没有权限。
答案 4 :(得分:1)
测试文件是否存在并不太难。有很多方法可以做到,但在阅读完之后我决定使用stat方法的最佳方法。我建议使用stat,因为我认为能够区分文件和目录很重要。我建议在Windows和Unix上使用它。
这里提供了两个指向MSDN和opengroup文档的链接。
答案 5 :(得分:0)
您打开文件并检查fopen()
或open()
的返回值。