检查文件存在于C中

时间:2012-02-28 13:28:09

标签: c file-io

我正在尝试在C应用程序中打开一个文件。在尝试读取文件之前,如何检查文件是否存在?

6 个答案:

答案 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的访问权限。但是,由于您打算打开文件,fopenopen可能就是您想要的。

答案 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文档的链接。

Windows

Unix

答案 5 :(得分:0)

您打开文件并检查fopen()open()的返回值。