gpt4 book ai didi

c - 顺序行为中的 Readdir()

转载 作者:行者123 更新时间:2023-12-03 22:49:39 28 4
gpt4 key购买 nike

int indent = 0;
int listDir(const char* dirname){
DIR* dir;
struct dirent* d;
if(!(dir = opendir(dirname)))
return -1;
while((d = readdir(dir)) != NULL){
if(strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0 ){
continue;
}
else if(d->d_type != DT_DIR){ // Any except folders.
printf("%*s- %s:%ld\n", indent, "", d->d_name, d->d_ino);
}
else if(d->d_type == DT_DIR){ // Folders only
printf("%*s[%s]\n", indent, "", d->d_name);
char path[1024];
snprintf(path, sizeof(path), "%s/%s", dirname, d->d_name);
indent +=2;
listDir(path);
indent -=2;
}

这个函数工作得很好,但唯一的是它输出以下结果作为示例: Output of the above function

我需要输出为容器文件夹、文件,然后是文件夹。这些文件夹应该位于列表的末尾。例如,上面的输出应该是:

enter image description here

最佳答案

我想说你有两个选择:

  1. 将所有 readdir() 结果插入已排序的数据结构中(或者只是将它们放入某个数组中并对其进行排序)。而且 - 我的意思是按照“文件 < 目录,没有其他顺序”的方式排序。
  2. 读取所有条目两次 - 一次,忽略所有子目录并仅打印文件;然后使用 rewinddir(),然后再次读取所有条目,忽略所有常规文件,仅打印子目录。

选项 2 可能更简单 - 但需要更多的库调用和系统调用。

关于c - 顺序行为中的 Readdir(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59548856/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com