コード例 #1
0
        /// <summary>
        /// </summary>
        /// <param name="folder"></param>
        /// <exception cref="ArgumentNullException"></exception>
        public void VisitFolder(FolderAddressable folder)
        {
            if (folder == null)
            {
                throw new ArgumentNullException("folder");
            }

            try
            {
                if (_taskToken.HasBeenCancelled)
                {
                    _fileTaskResults.Add(new FolderTaskResult(folder, null, "Задача прервана"));
                    return;
                }

                // если бы DirectorySeparatorChar не был установлен в Path.DirectorySeparatorChar, здесь надо было бы использовать разные стратегии для виртуальной и реальной файловой системы
                string newFolderPathRelative = _targetFileSystem.PathBuilder.GetRelativePath(_sourceFolderPath, folder.FullPath);

                string folderPathInDestinationSystem = _targetFileSystem.PathBuilder.CombinePaths(_destinationFolder, newFolderPathRelative);

                if (!_targetFileSystem.PathBuilder.PointsToRoot(folderPathInDestinationSystem))
                {
                    _targetFileSystem.CreateFolder(folderPathInDestinationSystem);
                }
            }
            catch (FolderAlreadyExistsException)
            {
            }
            catch (ArgumentException exception)
            {
                _fileTaskResults.Add(new FolderTaskResult(folder, null, "Не удалось создать эквивалент папки \"{0}\" в виртуальной файловой системе.{1}{2}".FormatWith(folder.FullPath, Environment.NewLine, exception.Message)));
            }
            catch (InvalidPathException exception)
            {
                this.AddNewErrorToFolderTaskResults(folder, exception);
            }
            catch (FolderNotFoundException exception)
            {
                this.AddNewErrorToFolderTaskResults(folder, exception);
            }
            catch (InsufficientSpaceException exception)
            {
                this.AddNewErrorToFolderTaskResults(folder, exception);
            }
            catch (MaximumFolderCountReachedException exception)
            {
                this.AddNewErrorToFolderTaskResults(folder, exception);
            }
            catch (ObjectDisposedException exception)
            {
                this.AddNewErrorToFolderTaskResults(folder, exception);
            }
        }
コード例 #2
0
        internal static int GetTotalFileCount(this FolderAddressable folder)
        {
            if (folder == null)
            {
                throw new ArgumentNullException("folder");
            }

            int countOfItems = folder.Files.Count();

            foreach (FolderAddressable subfolder in folder.Subfolders)
            {
                countOfItems += subfolder.GetTotalFileCount();
            }

            return(countOfItems);
        }
コード例 #3
0
 private void AddNewErrorToFolderTaskResults(FolderAddressable folder, Exception exception)
 {
     _fileTaskResults.Add(new FolderTaskResult(folder, null, exception.Message));
 }