Esempio n. 1
0
        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());
            }
        }
Esempio n. 2
0
        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());
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 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());
     }
 }
Esempio n. 5
0
 // 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());
     }
 }
Esempio n. 6
0
 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());
     }
 }
Esempio n. 7
0
 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());
     }
 }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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());
            }
        }
Esempio n. 10
0
        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());
            }
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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());
            }
        }
Esempio n. 14
0
        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));
        }
Esempio n. 15
0
        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));
        }
Esempio n. 16
0
        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);
        }
Esempio n. 17
0
        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);
        }