我正在使用Linux系统。
DIR *dir;
struct dirent *ent;
while ((ent = readdir (dir)) != NULL) {
printf ("%s\n", ent->d_name);
}
我得到"."
,".."
和一些文件名。
如何摆脱"."
和".."
?
我需要这些文件名以便进一步处理。
ent->d_name
的类型是什么?它是字符串还是字符?
答案 0 :(得分:2)
阅读readdir的手册页,得到这个:
struct dirent {
ino_t d_ino; /* inode number */
off_t d_off; /* offset to the next dirent */
unsigned short d_reclen; /* length of this record */
unsigned char d_type; /* type of file; not supported
by all file system types */
char d_name[256]; /* filename */
};
所以ent->d_name
是一个char数组。当然,你可以将它用作字符串。
摆脱"."
和".."
:
while ((ent = readdir (dir)) != NULL) {
if (strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0 )
printf ("%s\n", ent->d_name);
}
<强>更新强>
生成的ent
包含文件名和文件夹名称。如果不需要文件夹名称,最好使用ent->d_type
检查if(ent->d_type == DT_DIR)
字段。
答案 1 :(得分:1)
使用strcmp
:
while ((ent = readdir (dir)) != NULL) {
if (strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0)
//printf ("%s\n", ent->d_name);
}