如何在扩展名为".ngl"的目录中查找所有扩展名?
C 没有标准化的目录管理,那就是 POSIX(如果你愿意的话,也可以使用 Windows)。
在 POSIX 中,您可以执行以下操作:
- 获取包含目录
路径的char *
- 使用
opendir()
,你会得到一个DIR *
- 在
DIR *
上反复使用readdir()
会为您提供目录中struct dirent*
的条目 stuct dirent*
包含文件的名称,包括扩展名 (.ngl)。它还包含有关条目是常规文件还是其他内容(符号链接,子目录等)的信息
如果要通过一个系统调用获取文件夹中具有相同扩展名的文件名列表,可以尝试使用scandir
而不是使用opendir
和readdir
。 唯一要记住的是,您需要释放分配的内存 scandir
.
/* print files in current directory with specific file extension */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
/* when return 1, scandir will put this dirent to the list */
static int parse_ext(const struct dirent *dir)
{
if(!dir)
return 0;
if(dir->d_type == DT_REG) { /* only deal with regular file */
const char *ext = strrchr(dir->d_name,'.');
if((!ext) || (ext == dir->d_name))
return 0;
else {
if(strcmp(ext, ".ngl") == 0)
return 1;
}
}
return 0;
}
int main(void)
{
struct dirent **namelist;
int n;
n = scandir(".", &namelist, parse_ext, alphasort);
if (n < 0) {
perror("scandir");
return 1;
}
else {
while (n--) {
printf("%sn", namelist[n]->d_name);
free(namelist[n]);
}
free(namelist);
}
return 0;
}