1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-22 17:48:01 +02:00

Improved errors on files

This commit is contained in:
Brian Fiete 2021-12-31 10:26:32 -05:00
parent 85c936f014
commit befc60aa63
6 changed files with 48 additions and 27 deletions

View file

@ -6,21 +6,24 @@ namespace System.IO
{
public enum FileOpenError
{
Unknown,
NotFound,
NotFile,
Unknown,
SharingViolation
}
public enum FileReadError
{
Unknown
Unknown,
Timeout
}
public enum FileError
{
case FileOpenError(FileOpenError);
case FileReadError(FileReadError);
case Unknown;
case OpenError(FileOpenError);
case ReadError(FileReadError);
case SeekError;
}
static class File
@ -30,7 +33,7 @@ namespace System.IO
FileStream fs = scope FileStream();
var result = fs.Open(path, .Open, .Read);
if (result case .Err(let err))
return .Err(.FileOpenError(err));
return .Err(.OpenError(err));
while (true)
{
@ -61,9 +64,9 @@ namespace System.IO
{
StreamReader sr = scope StreamReader();
if (sr.Open(path) case .Err(let err))
return .Err(.FileOpenError(err));
return .Err(.OpenError(err));
if (sr.ReadToEnd(outText) case .Err)
return .Err(.FileReadError(.Unknown));
return .Err(.ReadError(.Unknown));
if (!preserveLineEnding)
{

View file

@ -62,12 +62,20 @@ namespace System.IO
return numBytesRead;
}
public virtual Result<int> TryRead(Span<uint8> data, int timeoutMS)
public virtual Result<int, FileError> TryRead(Span<uint8> data, int timeoutMS)
{
Platform.BfpFileResult result = .Ok;
int numBytesRead = Platform.BfpFile_Read(mBfpFile, data.Ptr, data.Length, timeoutMS, &result);
if ((result != .Ok) && (result != .PartialData))
return .Err;
{
switch (result)
{
case .Timeout:
return .Err(.ReadError(.Timeout));
default:
return .Err(.ReadError(.Unknown));
}
}
return numBytesRead;
}
@ -463,10 +471,10 @@ namespace System.IO
mUnderlyingLength = Platform.BfpFile_GetFileSize(mBfpFile);
}
protected Result<void> SeekUnderlying(int64 offset, Platform.BfpFileSeekKind seekKind = .Absolute)
protected Result<void, FileError> SeekUnderlying(int64 offset, Platform.BfpFileSeekKind seekKind = .Absolute)
{
int64 newPos = Platform.BfpFile_Seek(mBfpFile, offset, seekKind);
Result<void> result = ((seekKind == .Absolute) && (newPos != offset)) ? .Err : .Ok;
Result<void, FileError> result = ((seekKind == .Absolute) && (newPos != offset)) ? .Err(.SeekError) : .Ok;
if (result case .Ok)
mBfpFilePos = newPos;
return result;
@ -498,7 +506,7 @@ namespace System.IO
return numBytesRead;
}
public Result<int> TryRead(Span<uint8> data, int timeoutMS)
public Result<int, FileError> TryRead(Span<uint8> data, int timeoutMS)
{
if (mBfpFilePos != mPos)
Try!(SeekUnderlying(mPos));
@ -506,7 +514,15 @@ namespace System.IO
Platform.BfpFileResult result = .Ok;
int numBytesRead = Platform.BfpFile_Read(mBfpFile, data.Ptr, data.Length, timeoutMS, &result);
if ((result != .Ok) && (result != .PartialData))
return .Err;
{
switch (result)
{
case .Timeout:
return .Err(.ReadError(.Timeout));
default:
return .Err(.ReadError(.Unknown));
}
}
return numBytesRead;
}