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*\
}