std.Io.Dir opens paths relative to a directory, while std.Io.File represents an open file handle. Every operation receives the same std.Io context. The example writes, closes, reopens, and reads a temporary file, then removes it.
//! Use std.Io.Dir and std.Io.File handles for a complete file round trip.
const std = @import("std");
pub fn main(init: std.process.Init) !void {
const io = init.io;
const path = "zig-cookbook-io-demo.txt";
defer std.Io.Dir.cwd().deleteFile(io, path) catch {};
{
var file = try std.Io.Dir.cwd().createFile(io, path, .{});
defer file.close(io);
try file.writeStreamingAll(io, "written through an Io.File handle\n");
}
var reader_buffer: [128]u8 = undefined;
var reader = (try std.Io.Dir.cwd().openFile(io, path, .{})).reader(io, &reader_buffer);
defer reader.file.close(io);
const contents = try reader.interface.allocRemaining(init.gpa, .limited(reader_buffer.len));
defer init.gpa.free(contents);
std.debug.print("{s}", .{contents});
}