【ZIG】初学ZIG,写一个文本读取器

传递文件路径,读取文件内容,输出文件大小

const std = @import("std");

const allocator = std.heap.page_allocator;

// 打开文件,在打开后不要忘记关闭
pub fn openfile(filename: []const u8) std.fs.File.OpenError!std.fs.File {
    return std.fs.cwd().openFile(filename, .{ .mode = .read_only });
}

// 读取文件内容
pub fn readFile(file: std.fs.File) !void {
    const file_stat = try file.stat();

    const buffer: []u8 = try allocator.alloc(u8, file_stat.size);
    defer allocator.free(buffer);

    const size = try file.readAll(buffer);
    std.debug.print("FILE SIZE: {d} KB\n", .{@as(f32, @floatFromInt(size)) / @as(f32, 1 << 10)});
    std.debug.print("{s}\n", .{buffer});
}

pub fn main() !void {
    const argv = std.process.argsAlloc(allocator) catch |err| {
        std.debug.print("Alloc argv error: {?}", .{err});
        return;
    };
    defer std.process.argsFree(allocator, argv);
    if (argv.len < 2) {
        std.debug.print("Usage: {s} <filename...>\n", .{argv[0]});
        return;
    }

    for (1..argv.len) |value| {
        const filename = argv[value];

        const file = openfile(filename) catch |err| switch (err) {
            error.FileNotFound => {
                std.debug.print("OPEN FILE ERROR: {?}", .{err});
                return;
            },
            else => {
                std.debug.print("I dont know what happend... {?}", .{err});
                return;
            },
        };
        defer file.close();

        try readFile(file);
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值