/// <summary> /// Создает новый файл по указанному пути. /// Примечание: в текущей версии не создает недостающие папки. /// </summary> /// <param name="fullPathToFile">Полный путь (включая имя файла), указывающий, где будет находиться новый файл.</param> /// <returns>Сведения о только что созданном файле.</returns> /// <exception cref="InvalidPathException">Если указанный путь невалиден.</exception> /// <exception cref="ArgumentNullException"></exception> /// <exception cref="FolderNotFoundException">Если путь (<paramref name="fullPathToFile"/>), за исключением последней части (имени нового файла), указывает на несуществующую папку.</exception> /// <exception cref="FileAlreadyExistsException"></exception> /// <exception cref="InsufficientSpaceException"></exception> /// <exception cref="MaximumFileCountReachedException"></exception> /// <exception cref="ObjectDisposedException"></exception> public FileInfo CreateFile(string fullPathToFile) { MethodArgumentValidator.ThrowIfStringIsNullOrEmpty(fullPathToFile, "fullPathToFile"); if (_pathBuilder.PointsToRoot(fullPathToFile)) { throw new InvalidPathException("Не удалось создать файл: в качестве пути к файлу нельзя указать корень файловой системы"); } _pathValidator.Validate(fullPathToFile); try { string fileName; var nodeResolvingResult = _nodeResolver.ResolveParentFolderNodeByPath(fullPathToFile, out fileName); FolderNode parentFolder = nodeResolvingResult.ResolvedNode; var newFileInfo = new FileInfo(this.CreateFile(parentFolder, fileName), fullPathToFile); _folderEnumeratorRegistry.InvalidateEnumeratorsFor(nodeResolvingResult.FoldersPassedWhileResolving); return(newFileInfo); } catch (InsufficientSpaceException) { throw new InsufficientSpaceException("Недостаточно свободного места на диске для создания файла."); } catch (MaximumFileSizeReachedException) { throw new MaximumFileCountReachedException("Не удалось добавить файл: папка, в которую вы добавляете файл, не может вместить их больше, чем уже вмещает."); } catch (NoFreeBlocksException) { throw new InsufficientSpaceException("Недостаточно свободного места на диске для создания файла."); } catch (InvalidPathException) { throw new FolderNotFoundException("Не получилось создать файл по указанному пути (\"{0}\"). Не найдена папка, в которой следует создать файл. (В текущей версии недостающие папки не создаются автоматически)".FormatWith(fullPathToFile)); } catch (CannotResolvePathException) { throw new FolderNotFoundException("Не получилось создать файл по указанному пути (\"{0}\"). Не найдена папка, в которой следует создать файл. (В текущей версии недостающие папки не создаются автоматически)".FormatWith(fullPathToFile)); } }
/// <exception cref="InvalidPathException"></exception> /// <exception cref="CannotResolvePathException"></exception> FolderInfo IFilesAndFoldersProvider.GetParentOf(string folderPath) { lock (_operationExecutionCriticalSection) { ThrowIfDisposed(); string fileOrFolderName; var nodeResolvingResult = _nodeResolver.ResolveParentFolderNodeByPath(folderPath, out fileOrFolderName).ResolvedNode; string parentPath = folderPath.Substring(0, folderPath.Length - fileOrFolderName.Length); if (!_pathBuilder.PointsToRoot(parentPath)) { parentPath = parentPath.TrimEnd(new[] { VirtualFileSystem.DirectorySeparatorChar }); } return(new FolderInfo(nodeResolvingResult, parentPath)); } }