How do I check if file name is a directory or not in C?
我正在使用if(strstr(dir->d_name,".") == NULL && strstr(dir->d_name,"..")检查它是否是目录/子目录,但这仍然打印出一些不是目录的文件…我正在使用direct结构和dir。
- 你能再显示一点代码吗?
- 根据操作系统的不同,如果您阅读readdir手册页,您将看到它有一个名为d_type的成员,它是目录项的"文件"类型。
- 请参阅检查在不使用readdir()等时,Unix系统中是否存在一个目录调用答案,或者当系统仅提供来自的struct dirent的posix规范定义的最小信息(即d_name和d_ino)时。更合适的系统可以提供直接存储在struct dirent结构中的扩展信息中的文件类型。
strstr在另一个字符串中搜索子字符串,因此它将返回包含单个(well或double)句点的每个名称的匹配项。
您可能打算使用strcmp:
1 2
| if (strcmp(dir ->d_name ,".") && strcmp(dir ->d_name ,".."))
.. not one of the default root folders .. |
在此之前或之后,您可以检查它是否为文件夹:
1 2
| if (dir->d_type == DT_DIR)
.. |
或者使用stat。(请注意,某些文件系统类型可能不支持d_type。)
就个人而言,我喜欢stat()和fstat()。然后,您将看到输出的st_模式字段,其中包含类似s_isdir(m)的宏。
如果您使用的是Linux,那么可以使用getdents,其中包括条目类型。否则,您可能需要使用stat或lstat来获取每个项目的类型信息。