我正在使用
if(strstr(dir->d_name, ".") == NULL && strstr(dir->d_name, "..")
来检查是否为目录/子目录,但仍然会打印出一些不是目录的文件...我正在使用direct结构体和DIR。if(strstr(dir->d_name, ".") == NULL && strstr(dir->d_name, "..")
来检查是否为目录/子目录,但仍然会打印出一些不是目录的文件...我正在使用direct结构体和DIR。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
。)就我个人而言,我喜欢使用stat()和fstat()函数。然后可以使用像S_ISDIR(m)这样的宏来查看输出的st_mode字段。
readdir()
等函数或者当你的系统只提供 POSIX 规范中<dirent.h>
定义的最少信息(即d_name
和d_ino
),这种情况下也可用。更为兼容的系统可能会直接在struct dirent
结构体中存储扩展信息中的文件类型。 - Jonathan Leffler