Exemple #1
0
        /// <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));
            }
        }
Exemple #2
0
        /// <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));
            }
        }