protected override Result OpenDirectoryImpl(out IDirectory directory, string path, OpenDirectoryMode mode) { directory = default; string localPath = ResolveLocalPath(PathTools.Normalize(path)); Result rc = GetDirInfo(out DirectoryInfo dirInfo, localPath); if (rc.IsFailure()) { return(rc); } if (!dirInfo.Attributes.HasFlag(FileAttributes.Directory)) { return(ResultFs.PathNotFound.Log()); } try { IEnumerator <FileSystemInfo> entryEnumerator = dirInfo.EnumerateFileSystemInfos().GetEnumerator(); directory = new LocalDirectory(entryEnumerator, dirInfo, mode); return(Result.Success); } catch (Exception ex) when(ex.HResult < 0) { return(HResult.HResultToHorizonResult(ex.HResult).Log()); } }
protected override Result DoOpenDirectory(out IDirectory directory, U8Span path, OpenDirectoryMode mode) { UnsafeHelpers.SkipParamInit(out directory); Result rc = ResolveFullPath(out string fullPath, path); if (rc.IsFailure()) { return(rc); } rc = GetDirInfo(out DirectoryInfo dirInfo, fullPath); if (rc.IsFailure()) { return(rc); } if (!dirInfo.Attributes.HasFlag(FileAttributes.Directory)) { return(ResultFs.PathNotFound.Log()); } try { IEnumerator <FileSystemInfo> entryEnumerator = dirInfo.EnumerateFileSystemInfos().GetEnumerator(); directory = new LocalDirectory(entryEnumerator, dirInfo, mode); return(Result.Success); } catch (Exception ex) when(ex.HResult < 0) { return(HResult.HResultToHorizonResult(ex.HResult).Log()); } }
protected override Result SetSizeImpl(long size) { try { File.SetSize(size); } catch (Exception ex) when(ex.HResult < 0) { return(HResult.HResultToHorizonResult(ex.HResult).Log()); } return(Result.Success); }
internal static Result OpenFileInternal(out FileStream stream, string path, OpenMode mode) { try { stream = new FileStream(path, FileMode.Open, GetFileAccess(mode), GetFileShare(mode)); return(Result.Success); } catch (Exception ex) when(ex.HResult < 0) { stream = default; return(HResult.HResultToHorizonResult(ex.HResult).Log()); } }
// GetFileInfo and GetDirInfo detect invalid paths private static Result GetFileInfo(out FileInfo fileInfo, string path) { try { fileInfo = new FileInfo(path); return(Result.Success); } catch (Exception ex) when(ex.HResult < 0) { fileInfo = default; return(HResult.HResultToHorizonResult(ex.HResult).Log()); } }
private static Result GetDirInfo(out DirectoryInfo directoryInfo, string path) { try { directoryInfo = new DirectoryInfo(path); return(Result.Success); } catch (Exception ex) when(ex.HResult < 0) { directoryInfo = default; return(HResult.HResultToHorizonResult(ex.HResult).Log()); } }
private static Result GetSizeInternal(out long fileSize, FileInfo file) { try { fileSize = file.Length; return(Result.Success); } catch (Exception ex) when(ex.HResult < 0) { fileSize = default; return(HResult.HResultToHorizonResult(ex.HResult).Log()); } }
private static Result SetStreamLengthInternal(Stream stream, long size) { try { stream.SetLength(size); } catch (Exception ex) when(ex.HResult < 0) { return(HResult.HResultToHorizonResult(ex.HResult).Log()); } return(Result.Success); }
private static Result GetSizeInternal(out long fileSize, FileInfo file) { UnsafeHelpers.SkipParamInit(out fileSize); try { fileSize = file.Length; return(Result.Success); } catch (Exception ex) when(ex.HResult < 0) { return(HResult.HResultToHorizonResult(ex.HResult).Log()); } }
private static Result GetDirInfo(out DirectoryInfo directoryInfo, string path) { UnsafeHelpers.SkipParamInit(out directoryInfo); try { directoryInfo = new DirectoryInfo(path); return(Result.Success); } catch (Exception ex) when(ex.HResult < 0) { return(HResult.HResultToHorizonResult(ex.HResult).Log()); } }
private static Result CreateFileInternal(out FileStream file, FileInfo fileInfo) { file = default; try { file = new FileStream(fileInfo.FullName, FileMode.CreateNew, FileAccess.ReadWrite); } catch (Exception ex) when(ex.HResult < 0) { return(HResult.HResultToHorizonResult(ex.HResult).Log()); } return(Result.Success); }
public Result Initialize(string rootPath, PathMode pathMode, bool ensurePathExists) { if (rootPath == null) { return(ResultFs.NullptrArgument.Log()); } _mode = pathMode; // If the root path is empty, we interpret any incoming paths as rooted paths. if (rootPath == string.Empty) { _rootPath = rootPath; return(Result.Success); } try { _rootPath = Path.GetFullPath(rootPath); } catch (PathTooLongException) { return(ResultFs.TooLongPath.Log()); } catch (Exception) { return(ResultFs.InvalidCharacter.Log()); } if (!Directory.Exists(_rootPath)) { if (!ensurePathExists || File.Exists(_rootPath)) { return(ResultFs.PathNotFound.Log()); } try { Directory.CreateDirectory(_rootPath); } catch (Exception ex) when(ex.HResult < 0) { return(HResult.HResultToHorizonResult(ex.HResult).Log()); } } return(Result.Success); }
private static Result OpenDirectoryInternal(out IDirectory directory, OpenDirectoryMode mode, DirectoryInfo dirInfo) { try { IEnumerator <FileSystemInfo> entryEnumerator = dirInfo.EnumerateFileSystemInfos().GetEnumerator(); directory = new LocalDirectory(entryEnumerator, dirInfo, mode); return(Result.Success); } catch (Exception ex) when(ex.HResult < 0) { UnsafeHelpers.SkipParamInit(out directory); return(HResult.HResultToHorizonResult(ex.HResult).Log()); } }
private static Result DeleteFileInternal(FileInfo file) { if (!file.Exists) { return(ResultFs.PathNotFound.Log()); } try { file.Delete(); } catch (Exception ex) when(ex.HResult < 0) { return(HResult.HResultToHorizonResult(ex.HResult).Log()); } return(EnsureDeleted(file)); }
private static Result DeleteDirectoryInternal(DirectoryInfo dir, bool recursive) { if (!dir.Exists) { return(ResultFs.PathNotFound.Log()); } try { dir.Delete(recursive); } catch (Exception ex) when(ex.HResult < 0) { return(HResult.HResultToHorizonResult(ex.HResult).Log()); } return(EnsureDeleted(dir)); }
private static Result CreateDirInternal(DirectoryInfo dir, NxFileAttributes attributes) { try { dir.Create(); dir.Refresh(); if (attributes.HasFlag(NxFileAttributes.Archive)) { dir.Attributes |= FileAttributes.Archive; } } catch (Exception ex) when(ex.HResult < 0) { return(HResult.HResultToHorizonResult(ex.HResult).Log()); } return(Result.Success); }
private static Result RenameFileInternal(FileInfo source, FileInfo dest) { if (!source.Exists) { return(ResultFs.PathNotFound.Log()); } if (dest.Exists) { return(ResultFs.PathAlreadyExists.Log()); } try { source.MoveTo(dest.FullName); } catch (Exception ex) when(ex.HResult < 0) { return(HResult.HResultToHorizonResult(ex.HResult).Log()); } return(Result.Success); }