/// <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); } }
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); }
private void AddNewErrorToFolderTaskResults(FolderAddressable folder, Exception exception) { _fileTaskResults.Add(new FolderTaskResult(folder, null, exception.Message)); }