我使用if(strstr(dir->d_name, ".") == NULL && strstr(dir->d_name, "..")
来检查它是否是一个目录/子目录,但是这仍然打印出一些不是目录的文件......我正在使用直接结构和DIR。
答案 0 :(得分:4)
strstr
在另一个字符串中搜索子字符串,因此它将为包含单个(井或双)句点的每个名称返回一个匹配项。
您可能打算使用strcmp
:
if (strcmp(dir->d_name, ".") && strcmp(dir->d_name, ".."))
.. not one of the default root folders ..
在此之前或之后,您可以检查它是否是文件夹:
if (dir->d_type == DT_DIR)
..
或使用stat
。 (请注意,某些文件系统类型可能不支持d_type
。)
答案 1 :(得分:1)
就个人而言,我喜欢stat()和fstat()。然后使用类似S_ISDIR(m)的宏查看输出的st_mode字段。
答案 2 :(得分:0)
如果您使用的是Linux,则可以使用包含条目类型的getdents
。否则,您可能必须使用stat
/lstat
来获取每个项目的类型信息。