You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Zig中遍历指定路径的文件和目录且不包含子目录

问题描述

我尝试了以下Zig代码,它会遍历当前路径下的所有文件、目录及子目录,但我不需要遍历子目录。我尝试调整实现方式,却发现如果不传入.iterate = true就无法进行遍历,请问该如何实现需求?

const std = @import("std");

pub fn main() !void {
    const path = ".";
    const allocator = std.heap.page_allocator;

    var dir = try std.fs.cwd().openDir(path, .{ .iterate = true });
    defer dir.close();

    var walker = try dir.walk(allocator);

    defer walker.deinit();

    std.debug.print("\n", .{});
    while (try walker.next()) |entry| {
        std.debug.print("File Name: {s}\n", .{entry.basename});
    }
}

解决方案

你不需要使用walk方法(它的核心作用就是递归遍历所有子目录),改用Dir.iterate()方法即可仅遍历当前目录的内容。openDir时传入.iterate = true是启用目录迭代功能的必要参数,和是否递归遍历无关。

修改后的代码如下:

const std = @import("std");

pub fn main() !void {
    const path = ".";

    var dir = try std.fs.cwd().openDir(path, .{ .iterate = true });
    defer dir.close();

    // 使用 iterate 而非 walk,仅遍历当前目录下的直接条目
    var iterator = dir.iterate();
    while (try iterator.next()) |entry| {
        std.debug.print("File Name: {s}\n", .{entry.name});
    }
}

关键说明:

  • Dir.walk():递归遍历当前目录及其所有子目录下的所有条目,适合深度遍历场景。
  • Dir.iterate():仅遍历当前目录下的直接条目(文件、子目录、符号链接等),不会进入子目录,完全匹配你的需求。
  • .iterate = true:这是打开目录时启用迭代功能的必填参数,无论使用walk还是iterate都需要设置,否则无法获取目录条目。

内容的提问来源于stack exchange,提问作者prashanthsp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:57:08