代码之家  ›  专栏  ›  技术社区  ›  Frxstrem

如何确定文件或目录是否存在?

  •  1
  • Frxstrem  · 技术社区  · 14 年前

    我试图制作一个简单的程序来处理文件和目录,但我有两个主要问题:

    • 如何检查文件或目录是否存在,以及
    • 如何知道它是否是文件、目录、符号链接、设备、命名管道等。?主要是文件和目录现在很重要,但我也想知道其他的。

    所有建议使用 stat() 或者类似的函数,我已经研究过了,虽然它可能会回答我的第一个问题,但我不知道它会如何回答第二个问题。。。

    3 回复  |  直到 14 年前
        1
  •  6
  •   Sebastian Mach    12 年前

    因为您正在查询命名管道/符号链接等,所以可能是在*nix上,所以使用 lstat() 功能

    struct stat info;
    
    if(lstat(name,&info) != 0) {
      if(errno == ENOENT) {
       //  doesn't exist
       } else if(errno == EACCES) {
        // we don't have permission to know if 
       //  the path/file exists.. impossible to tell
       } else {
          //general error handling
       }
      return;
    }
    //so, it exists.
    
    if(S_ISDIR(info.st_mode)) {
      //it's a directory
    } else if(S_ISFIFO(info.st_mode)) {
      //it's a named pipe 
    } else if(....) {
    }
    

    here 对于S\u ISXXX宏,您可以使用。

        2
  •  2
  •   Adam Batkin    14 年前

    stat() 函数应该为您提供所需的一切(或者更具体地说) lstat() 自从 stat()

        3
  •  1
  •   ysth    14 年前

    使用 stat lstat )

    姓名

    简介

    #include <sys/stat.h>
    
    int stat(const char *restrict path, struct stat *restrict buf);
    

    说明

    如果命名文件是符号链接,stat()函数将继续使用符号链接的内容解析路径名,如果文件存在,将返回与结果文件相关的信息。

    buf参数是一个指向stat结构的指针,如在头文件中定义的,与文件有关的信息被放入其中。