Lets continue building the last program. In here we will be using the std.Io.Dir.walk() function to do the job. This will print all file names including the one we kept inside a sub directory.
const std = @import("std");
pub fn main(init: std.process.Init) !void {
const my_dir = std.Io.Dir.cwd().openDir(init.io, "./dir_enumerator", .{ .follow_symlinks = false, .iterate = true }) catch {
try std.Io.File.writeStreamingAll(.stdout(), init.io, "Failed to open directory. Exiting...\n");
std.process.exit(1);
};
defer my_dir.close(init.io);
var stdout_buffer: [1024]u8 = undefined;
var file_writer = std.Io.File.Writer.init(.stdout(), init.io, &stdout_buffer);
var stdout_printer = &file_writer.interface;
var walker = try std.Io.Dir.walk(my_dir, std.heap.page_allocator);
defer walker.deinit();
while (true) {
const entry = try walker.next(init.io);
if (entry == null) break;
try stdout_printer.print("{s} - {any}\n", .{ entry.?.path, entry.?.kind });
}
try stdout_printer.flush();
}
test1.txt - .file
test2.txt - .file
subdir - .directory
subdir/subdir_file.txt - .file
Thanks for reading. To be continued.
Top comments (0)