如何检查C中是否存在目录

时间:2010-01-17 05:16:15

标签: c directory filesystems

嘿伙计们,我对C比较陌生,所以请原谅我这是一个愚蠢的问题,但我怎样才能检查FILE是否是一个目录?我有

if (file == NULL) {  
    fprintf(stderr, "%s: No such file\n", argv[1]);  
    return 1;  
} 

并检查节点是否存在,但我想知道它是dir还是文件。 我做了一些谷歌搜索,我找不到答案:\

谢谢,

-Aaron

4 个答案:

答案 0 :(得分:6)

文件名本身不包含任何关于它们是否存在的信息,或者它们是否是与它们同步的目录 - 有人可以从您下面更改它。你想要做的是运行一个库调用,即stat(2),它报告文件是否存在以及它是什么。从手册页中,

[ENOENT]           The named file does not exist.

所以有一个错误代码报告(在errno中)该文件不存在。如果它确实存在,您可能希望检查它实际上是一个目录而不是常规文件。您可以通过检查返回的结构中的st_mode来执行此操作:

The status information word st_mode has the following bits:
...
#define        S_IFDIR  0040000  /* directory */

查看联机帮助页以获取更多信息。

答案 1 :(得分:6)

struct stat st;
if(stat("/directory",&st) == 0) 
        printf(" /directory is present\n");

答案 2 :(得分:4)

使用opendir尝试将其作为目录打开。如果返回空指针,则显然不是目录:)

以下是您问题的摘录:

  #include <stdio.h>
  #include <dirent.h>

   ...

  DIR  *dip;
  if ((dip = opendir(argv[1])) == NULL)
  {         
     printf("not a directory");
  }
  else closedir(dip);

答案 3 :(得分:0)

如果你正在使用* nix,stat()。