diff --git a/BeefLibs/corlib/src/IO/File.bf b/BeefLibs/corlib/src/IO/File.bf index dc63d23f..a3ae6cf2 100644 --- a/BeefLibs/corlib/src/IO/File.bf +++ b/BeefLibs/corlib/src/IO/File.bf @@ -25,6 +25,38 @@ namespace System.IO class File { + public static Result ReadAll(StringView path, List outData) + { + FileStream fs = scope FileStream(); + var result = fs.Open(path, .Open, .Read); + if (result case .Err(let err)) + return .Err(.FileOpenError(err)); + + while (true) + { + uint8[4096] buffer; + switch (fs.TryRead(.(&buffer, 4096))) + { + case .Ok(let bytes): + if (bytes == 0) + return .Ok; + outData.AddRange(.(&buffer, bytes)); + case .Err(let err): + return .Err(err); + } + } + } + + public static Result WriteAll(StringView path, Span data, bool doAppend = false) + { + FileStream fs = scope FileStream(); + var result = fs.Open(path, doAppend ? .Append : .Create, .Write); + if (result case .Err) + return .Err; + fs.TryWrite(.((uint8*)data.Ptr, data.Length)); + return .Ok; + } + public static Result ReadAllText(StringView path, String outText, bool preserveLineEnding = false) { StreamReader sr = scope StreamReader(); @@ -48,7 +80,8 @@ namespace System.IO var result = fs.Open(path, doAppend ? .Append : .Create, .Write); if (result case .Err) return .Err; - fs.TryWrite(.((uint8*)text.Ptr, text.Length)); + if (fs.TryWrite(.((uint8*)text.Ptr, text.Length)) case .Err(let err)) + return .Err(err); return .Ok; }