/// <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)); } }