Vala语言实现遍历文件夹及子文件夹内容并显示于TreeView
实现递归遍历嵌套目录的思路与代码修改
嗨,要实现遍历所有嵌套子文件夹的需求,核心就是递归遍历目录——当代码遇到子文件夹时,重复执行你当前的目录读取逻辑就行。下面是具体的实现思路和修改后的代码:
核心思路
- 把目录遍历的逻辑封装成一个独立函数,方便递归调用
- 遍历目录内的每个条目时,增加判断:
- 如果是普通文件:直接添加到你的
list_store中 - 如果是子目录:递归调用封装好的遍历函数,传入子目录的路径
- 如果是普通文件:直接添加到你的
- 保持原有的异常处理逻辑,递归过程中也要捕获文件操作的错误
修改后的代码
void populate_tree_view(GtkListStore *list_store, const gchar *directory) { try { Dir dir = Dir.open(directory, 0); string? name = null; while ((name = dir.read_name()) != null) { string path = Path.build_filename(directory, name); if (FileUtils.test(path, FileTest.IS_REGULAR)) { // 处理普通文件,添加到list_store list_store.append(out iter); list_store.set(iter, 0, name); } else if (FileUtils.test(path, FileTest.IS_DIR)) { // 遇到子目录,递归遍历 populate_tree_view(list_store, path); } } } catch (FileError err) { stderr.printf("Error accessing directory %s: %s\n", directory, err.message); } } // 调用示例 GtkListStore *list_store = ...; // 你的list_store初始化代码 populate_tree_view(list_store, "/home/malte/.password-store/");
关键点说明
- 函数封装:把遍历逻辑抽成
populate_tree_view函数,接收list_store和目标目录路径作为参数,这样递归时能持续往同一个列表存储里添加内容 - 目录判断:新增
FileTest.IS_DIR的判断,一旦检测到子目录就递归调用自身,深入下一层目录 - 错误优化:在异常输出里加上了目录路径,方便定位哪个目录出了问题
这样修改后,代码就能自动遍历所有嵌套的子文件夹,把所有普通文件都添加到你的TreeView对应的list_store里了。
内容的提问来源于stack exchange,提问作者beli3ver
相关产品推荐
相关产品推荐

