What's the best way to check if a file exists in C?

后端 未结 9 1542
眼角桃花
眼角桃花 2020-11-22 04:34

Is there a better way than simply trying to open the file?

int exists(const char *fname)
{
    FILE *file;
    if ((file = fopen(fname, \"r\")))
    {
               


        
9条回答
  •  面向向阳花
    2020-11-22 05:24

    Usually when you want to check if a file exists, it's because you want to create that file if it doesn't. Graeme Perrow's answer is good if you don't want to create that file, but it's vulnerable to a race condition if you do: another process could create the file in between you checking if it exists, and you actually opening it to write to it. (Don't laugh... this could have bad security implications if the file created was a symlink!)

    If you want to check for existence and create the file if it doesn't exist, atomically so that there are no race conditions, then use this:

    #include 
    #include 
    
    fd = open(pathname, O_CREAT | O_WRONLY | O_EXCL, S_IRUSR | S_IWUSR);
    if (fd < 0) {
      /* failure */
      if (errno == EEXIST) {
        /* the file already existed */
        ...
      }
    } else {
      /* now you can use the file */
    }
    

提交回复
热议问题