c - 如何判断一个文件或目录是否存在?

标签 c file directory

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

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

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

最佳答案

既然你在询问命名管道/符号链接(symbolic link)等,你可能在 *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(....) {
}

SE 文档 here对于您可以使用的 S_ISXXX 宏。

关于c - 如何判断一个文件或目录是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3543231/

相关文章:

c - 将数组指针传递给结构并访问数组

c - 列表操作

java !必须计算文件中的符号数

java - 当我尝试访问手机的外部存储器时应用程序崩溃

c++ - 静态库的内容

javascript - 如何在 Windows 上使用 SpiderMonkey

qt - 使用带有 Qt 的 post 将二进制文件发送到服务器

file - 如何区分同一ip地址(wifi)中的两个或多个设备?

windows - 在目录/子目录中生成文件夹 list.txt 文件,并在批处理文件中使用 dir & ren 命令将 list.txt 重命名为文件夹/子文件夹名称

java - 如何使用 FTP 在 Java 中的一次调用中创建具有多个级别的目录