如何在调用C中的readdir()时检查ent.d-> name是否为文件或目录,其中ent的类型为struct dirent *。在C中的readdir()中标识目录
回答
这就是S_ISREG()
和S_ISDIR()
与stat(2)
一起使用。详情请见手册页。
如果您的生活环境不完全符合POSIX标准,您可以分别使用DT_REG()
和DT_DIR()
来检查目录性与规则性。这在readdir(3)
的手册页中提到。
您可能想使用'lstat',而不是'stat'。 (你是否假设OP在询问Linux?) – 2013-03-22 14:24:06
为什么?该选择取决于您是要识别符号链接还是遵循它们。 – 2013-03-22 14:51:38
@DavidSchwartz另外,手册页提到了两者,并解释了它们之间的区别。无论如何,这个答案本身并不足以写出整个代码(而且这个答案是在问题仍在SuperUser上时写的)。 – 2013-03-22 14:55:38
另一种方法是尝试调用执行opendir()在d_name,看是否返回null:
int isDir(struct dirent *ent)
{
if (ent && strcmp(ent->d_name, ".") && strcmp(ent->d_name, "..")) // don't include pwd and parent dir
{
DIR *isDir = opendir(ent->d_name);
if (isDir)
return 1;
}
return 0;
}
你应该在某个时候关闭DIR ... – DanZimm 2013-03-22 15:16:44
假设POSIX,readdir()已经返回OP所要求的信息,所以opendir()在最好的情况下是多余的,最坏的情况是惩罚。 – 2013-03-22 15:21:26
- 1. 我如何获得readdir忽略C/C++中的目录?
- 2. 在目录中找不到标识符
- 3. C在chdir之后的readdir中的segfault
- 4. 目标中的目录大小C
- 5. 目标中的文档目录C
- 6. 在目标C中使用未声明的标识符
- 7. 在C函数中未识别的目标C对象
- 8. Segfault调用readdir() - 目录遍历
- 9. 唯一标识符(长)在目标c中
- 10. C++中的空白标识
- 11. 未声明的标识符目标C
- 12. 目录中的C +
- 13. iOS:在目标文件中指定.xcconfig文件中的代码标识标识
- 14. 为什么Perl的readdir()缓存目录条目?
- 15. 目标C/C中的声音模式识别
- 16. 在目标c中的nsstring
- 17. php的readdir函数能在一个目录中使用100万个文件吗?
- 18. 在发布项目时在ASP.NET C#中获取用户标识
- 19. 目录在Python中未被识别
- 20. AuthZ的目录标识符不支持
- 21. 阅读目录(readdir)和目录上的查找操作之间的区别
- 22. 在C++中删除目录
- 23. 在C中浏览目录#
- 24. 在C++中执行目录
- 25. C,C++中__func__标识符的用例?
- 26. 在目标C中实现标头C
- 27. 预计标识符或 '(' 目标C
- 28. 目标C使用了标识*
- 29. 在新目标中未识别IBOutlet
- 30. 函数在目标中未被识别-C
我注意到你有一个(因此)帐户。编程问题在那里。如果由于某种原因,您无法在此发布信息,例如由于问题禁止,那么没有理由在此发布编程问题。 – 2013-03-22 13:58:09