Zig Cookbook

介绍

遍历目录

在 Zig 中遍历目录,可以使用标准库中的 std.fs 模块。它提供了多种方法来操作文件系统,例如打开目录、读取目录内容等,这里使用 walk 方法来递归遍历目录。

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

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer if (gpa.deinit() != .ok) @panic("leak");
    const allocator = gpa.allocator();

    // In order to walk the directry, `iterate` must be set to true.
    var dir = try fs.cwd().openDir("zig-out", .{ .iterate = true });
    defer dir.close();

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

    while (try walker.next()) |entry| {
        print("path: {s}, basename:{s}, type:{s}\n", .{
            entry.path,
            entry.basename,
            @tagName(entry.kind),
        });
    }
}

walk 方法接受一个回调函数作为参数,该函数会在遍历到每个文件或子目录时被调用。回调函数可以根据需要处理每个文件或目录,例如打印其路径、检查其类型等。

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

上一示例:检查文件是否存在
下一示例:目录