遍历目录
在 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
方法接受一个回调函数作为参数,该函数会在遍历到每个文件或子目录时被调用。回调函数可以根据需要处理每个文件或目录,例如打印其路径、检查其类型等。
遍历时,,返回的每个文件系统条目的顺序是未定义的,如果对返回条目的顺序有任何要求,例如按字母顺序或按时间顺序排序,请相应地进行排序。否则,保持它们的原始、未排序的顺序。