I am getting myself familiar to the new IO interface. and I once again hit a roadblock where I can’t break through…
const std = @import("std");
const code = @import("code");
fn load(allocator: std.mem.Allocator, filepath: []const u8) ![]u8 {
var file = try std.fs.cwd().openFile(filepath, .{ .mode = .read_only });
defer file.close();
var temp: [4096]u8 = undefined;
var reader = file.reader(temp[0..]).interface;
const data = try reader.allocRemaining(allocator, .unlimited);
errdefer allocator.free(data);
std.debug.print("Bytes read: {d}\n", .{data.len});
return data;
}
pub fn main() !void {
const alloc = std.heap.smp_allocator;
const data = try load(alloc, "example.zig");
std.debug.print("{any}", .{data});
}
where is the invalid handle coming from?
PS>zig build run
error.Unexpected: GetLastError(6): The handle is invalid.
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\os\windows.zig:1534:49: 0x7ff6d94d203b in GetFileSizeEx (code_zcu.obj)
else => |err| return unexpectedError(err),
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:1214:42: 0x7ff6d94f13a7 in getSize (code_zcu.obj)
if (windows.GetFileSizeEx(r.file.handle)) |size| {
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Writer.zig:2656:51: 0x7ff6d952505a in sendFile (code_zcu.obj)
const additional = if (file_reader.getSize()) |size| size - pos else |_| std.atomic.cache_line;
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Writer.zig:896:29: 0x7ff6d9520e78 in sendFile (code_zcu.obj)
return w.vtable.sendFile(w, file_reader, limit);
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:1317:57: 0x7ff6d951ffe2 in stream (code_zcu.obj)
.positional, .streaming => return w.sendFile(r, limit) catch |write_err| switch (write_err) {
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:178:34: 0x7ff6d94c90e2 in stream (code_zcu.obj)
const n = try r.vtable.stream(r, w, limit);
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:322:25: 0x7ff6d951ed7d in appendRemaining (code_zcu.obj)
const n = stream(r, &a.writer, remaining) catch |err| switch (err) {
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:291:24: 0x7ff6d951e6af in allocRemaining (code_zcu.obj)
try appendRemaining(r, gpa, &buffer, limit);
^
C:\Users\chris\zigutor\short\error_handling\code\src\main.zig:10:43: 0x7ff6d951e4d5 in load (code_zcu.obj)
const data = try reader.allocRemaining(allocator, .unlimited);
^
C:\Users\chris\zigutor\short\error_handling\code\src\main.zig:20:26: 0x7ff6d951e8b1 in main (code_zcu.obj)
const data = try load(alloc, "example.zig");
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\start.zig:443:53: 0x7ff6d951ea69 in WinStartup (code_zcu.obj)
std.os.windows.ntdll.RtlExitUserProcess(callMain());
^
???:?:?: 0x7ff9712de8d6 in ??? (KERNEL32.DLL)
???:?:?: 0x7ff971e0c53b in ??? (ntdll.dll)
error: ReadFailed
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\os\windows.zig:647:36: 0x7ff6d94d2515 in ReadFile (code_zcu.obj)
.INVALID_HANDLE => return error.NotOpenForReading,
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:849:9: 0x7ff6d94b01d4 in read (code_zcu.obj)
return windows.ReadFile(self.handle, buffer, null);
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:1535:13: 0x7ff6d9521858 in readStreaming (code_zcu.obj)
return error.ReadFailed;
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:1415:34: 0x7ff6d9520dc6 in readVecStreaming (code_zcu.obj)
io_reader.end += try readStreaming(r, io_reader.buffer[io_reader.end..]);
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:1346:47: 0x7ff6d952050d in readVec (code_zcu.obj)
.streaming, .streaming_reading => return readVecStreaming(r, data),
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:374:33: 0x7ff6d95265bf in readVec (code_zcu.obj)
error.ReadFailed => return error.ReadFailed,
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:633:33: 0x7ff6d95259ea in readSliceShort (code_zcu.obj)
error.ReadFailed => return error.ReadFailed,
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Writer.zig:2660:19: 0x7ff6d952524e in sendFile (code_zcu.obj)
const n = try file_reader.interface.readSliceShort(dest);
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Writer.zig:896:5: 0x7ff6d9520ea5 in sendFile (code_zcu.obj)
return w.vtable.sendFile(w, file_reader, limit);
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\fs\File.zig:1322:29: 0x7ff6d9520322 in stream (code_zcu.obj)
else => |e| return e,
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:178:15: 0x7ff6d94c9206 in stream (code_zcu.obj)
const n = try r.vtable.stream(r, w, limit);
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:325:33: 0x7ff6d951f075 in appendRemaining (code_zcu.obj)
error.ReadFailed => return error.ReadFailed,
^
C:\Users\chris\scoop\apps\zig\0.15.2\lib\std\Io\Reader.zig:291:5: 0x7ff6d951e6db in allocRemaining (code_zcu.obj)
try appendRemaining(r, gpa, &buffer, limit);
^
C:\Users\chris\zigutor\short\error_handling\code\src\main.zig:10:18: 0x7ff6d951e50c in load (code_zcu.obj)
const data = try reader.allocRemaining(allocator, .unlimited);
^
C:\Users\chris\zigutor\short\error_handling\code\src\main.zig:20:18: 0x7ff6d951e8c9 in main (code_zcu.obj)
const data = try load(alloc, "example.zig");
^
run
└─ run exe code failure
error: the following command exited with error code 1:
"C:\\Users\\chris\\zigutor\\short\\error_handling\\code\\zig-out\\bin\\code.exe"
Build Summary: 3/5 steps succeeded; 1 failed
run transitive failure
└─ run exe code failure
error: the following build command failed with exit code 1:
.zig-cache\o\da09ce929c94e38d9cd231fde004aeb3\build.exe C:\Users\chris\scoop\apps\zig\0.15.2\zig.exe C:\Users\chris\scoop\apps\zig\0.15.2\lib C:\Users\chris\zigutor\short\error_handling\code .zig-cache C:\Users\chris\AppData\Local\zig --seed 0xfe4f5664 -Z80bf7040c20bc44b run
Value cannot be null. (Parameter 'path2')
PS>
Thank you very much!