在 Zig 中遍历目录,可以使用标准库中的 std.Io.Dir 模块。这里使用 walk 方法递归遍历目录, 筛选 .smd 文件,并使用 statFile() 输出过去 24 小时内修改过的文件。

const std = @import("std");
const print = std.debug.print;

pub fn main(init: std.process.Init) !void {
    const gpa = init.gpa;
    const io = init.io;

    var dir = try std.Io.Dir.cwd().openDir(io, "src", .{ .iterate = true });
    defer dir.close(io);

    var walker = try dir.walk(gpa);
    defer walker.deinit();

    const now_ns = std.Io.Clock.real.now(io).nanoseconds;
    while (try walker.next(io)) |entry| {
        if (entry.kind != .file) continue;
        if (!std.mem.endsWith(u8, entry.basename, ".smd")) continue;

        const stat = try dir.statFile(io, entry.path, .{});
        const age_ns = now_ns - stat.mtime.nanoseconds;
        if (age_ns < 0) continue;
        if (age_ns < std.time.ns_per_hour * 24) {
            print("modified {d}s ago, size: {d}, file: {s}\n", .{
                @divTrunc(age_ns, std.time.ns_per_s),
                stat.size,
                entry.path,
            });
        }
    }
}

遍历时,返回的每个文件系统条目的顺序是未定义的,如果对返回条目的顺序有任何要求,例如按字母顺序或按时间顺序排序,请相应地进行排序。否则,保持它们的原始、未排序的顺序。