private FileResolveResult ResolveDestinationFile([NotNull] FileCopyArguments arguments)
        {
            var destinationResolver = new FileResolver(Container)
            {
                ErrorFileFoundAsDirectory = ErrorFactory.System.TargetIsNotFile
            };

            return(destinationResolver.TryResolveFile(arguments.DestinationPath));
        }
Beispiel #2
0
        public override object Handle(FileDeleteArguments arguments)
        {
            Guard.NotNull(arguments, nameof(arguments));

            var resolver = new FileResolver(Root);
            FileResolveResult resolveResult = resolver.TryResolveFile(arguments.Path);

            if (resolveResult.ExistingFileOrNull != null)
            {
                DeleteFile(resolveResult.ExistingFileOrNull, resolveResult.ContainingDirectory, arguments);
            }

            return(Missing.Value);
        }
Beispiel #3
0
        public override bool Handle(EntryExistsArguments arguments)
        {
            Guard.NotNull(arguments, nameof(arguments));

            if (arguments.Path == null)
            {
                return(false);
            }

            var resolver = new FileResolver(Container);
            FileResolveResult resolveResult = resolver.TryResolveFile(arguments.Path);

            return(resolveResult.ExistingFileOrNull != null);
        }
Beispiel #4
0
        public override bool Handle(DirectoryOrFileExistsArguments arguments)
        {
            Guard.NotNull(arguments, nameof(arguments));

            if (arguments.Path == null)
            {
                return(false);
            }

            var resolver = new FileResolver(Root);

            (DirectoryEntry _, FileEntry existingFileOrNull, string _) = resolver.TryResolveFile(arguments.Path);

            return(existingFileOrNull != null);
        }
        public override IFileStream Handle(FileOpenArguments arguments)
        {
            Guard.NotNull(arguments, nameof(arguments));

            FileAccess fileAccess = DetectFileAccess(arguments);

            AssertValidCombinationOfModeWithAccess(arguments.Mode, fileAccess);

            var resolver = new FileResolver(Root);
            FileResolveResult resolveResult = resolver.TryResolveFile(arguments.Path);

            return(resolveResult.ExistingFileOrNull != null
                ? HandleExistingFile(resolveResult.ExistingFileOrNull, fileAccess, arguments)
                : HandleNewFile(resolveResult.FileName, resolveResult.ContainingDirectory, fileAccess, arguments));
        }
Beispiel #6
0
        public override object Handle(FileDeleteArguments arguments)
        {
            Guard.NotNull(arguments, nameof(arguments));

            var resolver = new FileResolver(Root);

            (DirectoryEntry containingDirectory, FileEntry existingFileOrNull, string _) =
                resolver.TryResolveFile(arguments.Path);

            if (existingFileOrNull != null)
            {
                DeleteFile(existingFileOrNull, containingDirectory, arguments);
            }

            return(Missing.Value);
        }
Beispiel #7
0
        public override IFileStream Handle(FileCreateArguments arguments)
        {
            Guard.NotNull(arguments, nameof(arguments));
            AssertValidCreationOptions(arguments);

            var resolver = new FileResolver(Root);
            FileResolveResult resolveResult = resolver.TryResolveFile(arguments.Path);

            AssertIsNotHiddenOrReadOnly(resolveResult.ExistingFileOrNull, arguments.Path);

            FileEntry file = resolveResult.ExistingFileOrNull ??
                             resolveResult.ContainingDirectory.CreateFile(resolveResult.FileName);

            if ((arguments.Options & FileOptions.DeleteOnClose) != 0)
            {
                file.EnableDeleteOnClose();
            }

            return(file.Open(FileMode.Create, FileAccess.ReadWrite, arguments.Path));
        }
Beispiel #8
0
        private FileEntry ResolveDestinationFile([NotNull] AbsolutePath destinationPath, bool overwrite,
                                                 [NotNull] FileEntry sourceFile)
        {
            var destinationResolver = new FileResolver(Root)
            {
                ErrorFileFoundAsDirectory = ErrorFactory.System.TargetIsNotFile
            };
            FileResolveResult resolveResult = destinationResolver.TryResolveFile(destinationPath);

            DateTime utcNow = Root.SystemClock.UtcNow();

            FileEntry destinationFile;

            if (resolveResult.ExistingFileOrNull != null)
            {
                AssertCanOverwriteFile(overwrite, destinationPath);
                AssertIsNotHiddenOrReadOnly(resolveResult.ExistingFileOrNull, destinationPath);

                destinationFile = resolveResult.ContainingDirectory.Files[resolveResult.FileName];
            }
            else
            {
                destinationFile = resolveResult.ContainingDirectory.CreateFile(resolveResult.FileName);
                destinationFile.CreationTimeUtc = utcNow;
            }

            using (IFileStream createStream = destinationFile.Open(FileMode.Truncate, FileAccess.Write, destinationPath))
            {
                createStream.SetLength(sourceFile.Size);
            }

            destinationFile.Attributes = sourceFile.Attributes;

            destinationFile.LastAccessTimeUtc = utcNow;
            destinationFile.LastWriteTimeUtc  = sourceFile.LastWriteTimeUtc;

            return(destinationFile);
        }