C 检查文件是否不是目录

C 检查文件是否不是目录,c,C,我目前有一个检查文件是否为目录的代码,如下所示 file = readdir (dir); if(file->d_type & DT_DIR){ \* some code*\ } 我想知道,与此正好相反的if语句是什么。沿着“if file is not directory”(如果文件不是目录)这一行,任何布尔表达式都可以用not运算符(!)求反: 关于你的问题,你可以这样做: if(!(file-

我目前有一个检查文件是否为目录的代码,如下所示

          file = readdir (dir);
          if(file->d_type & DT_DIR){
          \* some code*\
          }

我想知道,与此正好相反的if语句是什么。沿着“if file is not directory”(如果文件不是目录)这一行,任何布尔表达式都可以用not运算符(
)求反:


关于你的问题,你可以这样做:

 if(!(file->d_type & DT_DIR)){} 

按位&将与DT_SOCK=12和DT_WHT=14匹配。。。如果只检查目录。。。应该使用“==”

反向:

 file = readdir (dir);
          if(file->d_type != DT_DIR){
          \* some code*\
          }

您可以在任何条件块上放置否定来反转它,您现在已经知道了。

您可以检查表达式的计算结果是否为false:

      file = readdir (dir);
      if( (file->d_type & DT_DIR) == 0 ){
      \* some code*\
      }

您能解释一下为什么要使用逻辑and而不是按位and吗?按位
&
运算符与逻辑
&
运算符不同,因此,代码讨论文件是否存在,所以我假设d_type和DT_DIR包含布尔值True或False,所以我使用了逻辑表示法。您也可以选择按位,因为它只是0和1,但我遵循了在if语句中使用逻辑的一般方法。@Sharath:也许您应该阅读linux上的
readdir()
手册页?哦,天哪,这么简单。谢谢你,这和问题不一样。OP是关于
&
&将匹配DT_SOCK=12,DT_WHT=14。。。如果只检查目录。。。如果语句由于可能与其他文件类型的位模式重叠而不一定正确,则应在
中使用==
。建议不要假设DT_DIR是唯一的,而是使用:
if(file->d_type==DT_DIR){
然后询问它是否是一个目录将是:
if(file->d_type!=DT_DIR){
即单个字符的更改
 file = readdir (dir);
          if(file->d_type != DT_DIR){
          \* some code*\
          }
      file = readdir (dir);
      if( (file->d_type & DT_DIR) == 0 ){
      \* some code*\
      }