如何获取目录中的所有文件名而不获取"&引用;及"&引用;在C中
我正在使用Linux系统如何获取目录中的所有文件名而不获取"&引用;及"&引用;在C中,c,linux,C,Linux,我正在使用Linux系统 DIR *dir; struct dirent *ent; while ((ent = readdir (dir)) != NULL) { printf ("%s\n", ent->d_name); } 我得到了“,”,“和一些文件名。 我怎样才能摆脱“和”。“? 我需要这些文件名以便进一步处理。 什么类型的ent->d_name??它是字符串还是字符?使用strcmp while ((ent = readdir (d
DIR *dir;
struct dirent *ent;
while ((ent = readdir (dir)) != NULL) {
printf ("%s\n", ent->d_name);
}
我得到了“
,”,“
和一些文件名。
我怎样才能摆脱“
和”。“
?
我需要这些文件名以便进一步处理。
什么类型的
ent->d_name
??它是字符串还是字符?使用strcmp
while ((ent = readdir (dir)) != NULL) {
if (strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0)
//printf ("%s\n", ent->d_name);
}
使用strcmp
while ((ent = readdir (dir)) != NULL) {
if (strcmp(ent->d_name, ".") != 0 && strcmp(ent->d_name, "..") != 0)
//printf ("%s\n", ent->d_name);
}
阅读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
是一个字符数组。当然,你可以把它当作字符串
要摆脱“
和”。“
:
更新
生成的ent
包含文件名和文件夹名。如果不需要文件夹名称,最好使用If(ent->d_type==DT_DIR)
检查ent->d_type
字段,阅读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
是一个字符数组。当然,你可以把它当作字符串
要摆脱“
和”。“
:
更新
生成的ent
包含文件名和文件夹名。如果不需要文件夹名称,最好使用If(ent->d\u type==DT\u DIR)
检查ent->d\u type
字段。如果d_name
是一个字符,那么使用%s
打印它将是未定义的行为(更不用说使用一个字符存储整个文件名将需要一些惊人的数据压缩算法)。“d_name
的类型是什么?是字符串还是字符?”-您是否阅读了文档?可能是的副本。如果d_name
是一个字符,那么使用%s
打印它将是未定义的行为(更不用说使用一个字符存储整个文件名将需要一些惊人的数据压缩算法)。“d_name
的类型是什么?是字符串还是字符?”-您读过文档了吗?当然字符串类型的可能副本在C中并不存在(仅在C++中),因此所有字符串实际上都只是一个字符数组。@UltimateGobblement完全正确。当然字符串类型在C中不存在(仅在C++中),因此所有字符串实际上都只是一个字符数组。@UltimateGobblement完全正确。