Beispiel #1
0
        /// <exception cref="FileNotFoundException"></exception>
        /// <exception cref="FileLockedException"></exception>
        private FileNode ResolveFileNodeThrowingUserFriendlyErrors(
            string filePath,
            NodeResolvingResult <FolderNode> parentFolderResolvingResult,
            string fileName,
            string verbForPuttingIntoExceptionMessageTemplate,
            out ReadOnlyCollection <FileNode> filesFromSameFolder)
        {
            FileNode fileNode = _nodeResolver.ResolveFileNode(filePath, parentFolderResolvingResult,
                                                              fileName,
                                                              verbForPuttingIntoExceptionMessageTemplate,
                                                              out filesFromSameFolder);

            if (_lockingManager.IsFileLocked(fileNode))
            {
                throw new FileLockedException("Не получилось {0} файл (\"{1}\"): он открыт для чтения или записи.".FormatWith(verbForPuttingIntoExceptionMessageTemplate, filePath));
            }

            return(fileNode);
        }
        /// <summary>
        /// Создает новую папку по указанному пути.
        /// Примечание: в текущей версии не создает недостающие папки.
        /// </summary>
        /// <param name="fullPathForFolder">Путь, указывающий местоположение новой папки (включая ее имя).</param>
        /// <returns>Описание только что созданной папки.</returns>
        /// <exception cref="InvalidPathException">Если указанный путь невалиден.</exception>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="FolderNotFoundException">Если путь (<paramref name="fullPathForFolder"/>), за исключением последней части (имени новой папки), указывает на несуществующую папку.</exception>
        /// <exception cref="FolderAlreadyExistsException"></exception>
        /// <exception cref="InsufficientSpaceException"></exception>
        /// <exception cref="MaximumFolderCountReachedException"></exception>
        /// <exception cref="ObjectDisposedException"></exception>
        public FolderInfo CreateFolder(string fullPathForFolder)
        {
            MethodArgumentValidator.ThrowIfStringIsNullOrEmpty(fullPathForFolder, "fullPathForFolder");

            if (_pathBuilder.PointsToRoot(fullPathForFolder))
            {
                throw new InvalidPathException("Не удалось создать папку: в качестве пути для новой папки нельзя задать корень файловой системы");
            }

            _pathValidator.Validate(fullPathForFolder);

            try
            {
                string folderName;

                NodeResolvingResult <FolderNode> nodeResolvingResult = _nodeResolver.ResolveParentFolderNodeByPath(fullPathForFolder, out folderName);

                FolderNode parentFolder = nodeResolvingResult.ResolvedNode;

                var newFolderInfo = new FolderInfo(this.CreateFolder(parentFolder, folderName), fullPathForFolder);

                _folderEnumeratorRegistry.InvalidateEnumeratorsFor(nodeResolvingResult.FoldersPassedWhileResolving);

                return(newFolderInfo);
            }
            catch (InsufficientSpaceException)
            {
                throw new InsufficientSpaceException("Недостаточно свободного места на диске для создания папки.");
            }
            catch (MaximumFileSizeReachedException)
            {
                throw new MaximumFolderCountReachedException("Не удалось добавить папку: директория, в которую вы добавляете поддиректорию, не может вместить их больше, чем уже вмещает.");
            }
            catch (NoFreeBlocksException)
            {
                throw new InsufficientSpaceException("Недостаточно свободного места на диске для создания папки.");
            }
            catch (CannotResolvePathException)
            {
                throw new FolderNotFoundException("Не получилось создать папку по указанному пути (\"{0}\"). Не найдена папка, в которой следует создать подпапку. (В текущей версии недостающие папки не создаются автоматически)".FormatWith(fullPathForFolder));
            }
        }