public void ProcessSizes() { foreach (var path in _directoryPaths.GetConsumingEnumerable()) { DirectoryInfo di = null; try { di = new DirectoryInfo(path); } catch { } if (di != null) { var size = GetLocalSize(di); var sizeData = new DirectorySizeData(di.FullName, size); AddOrUpdateLocalSize(sizeData); foreach (var ancestor in sizeData.Path.GetAncestorPaths()) { AddOrUpdateAncestorSize(ancestor, size); } } } }
private IEnumerable <DirectorySizeData> FindLargestSubDirectories( DirectorySizeData parentDirectory, double percentageThreshold ) { double thresholdMultiplier = percentageThreshold; double thresholdMultiplierIncrement = percentageThreshold + (percentageThreshold / 2d); double includeParentThresholdMultiplier = 1 + (percentageThreshold * 4); var thresholdSize = parentDirectory.TotalSize * (thresholdMultiplier + (thresholdMultiplierIncrement * parentDirectory.Path.Depth)); var qualifyingDirectories = new List <DirectorySizeData>(); var directoriesWithinThreshold = _directoryData .Where(d => d.Path.ParentPath == parentDirectory.Path.FullPath && d.TotalSize >= thresholdSize).ToList(); var subSize = directoriesWithinThreshold.Sum(d => d.TotalSize); if (Root != parentDirectory && (parentDirectory.TotalSize - subSize) >= (thresholdSize * includeParentThresholdMultiplier)) { qualifyingDirectories.Add(parentDirectory); } foreach (var directory in directoriesWithinThreshold) { qualifyingDirectories.AddRange(FindLargestSubDirectories(directory, percentageThreshold)); } return(qualifyingDirectories); }
private void RenderSubDirectory(DirectorySizeData directory) { var size = _sizeConversion.Convert(directory.LocalSize); var totalSize = _sizeConversion.Convert(directory.TotalSize); var output = $" {directory.Name,NAME_COLUMN_WIDTH+2}{size,SIZE_COLUMN_WIDTH}{totalSize,SIZE_COLUMN_WIDTH}"; RenderColorLine(totalSize, output); }
private IEnumerable <DirectorySizeData> GetSubDirectories(DirectorySizeData directory) { var directories = _directoryData.Where(d => d.Path.ParentPath == directory.Path.FullPath) .OrderBy(d => d.Name); return(directories); }
public DirectoryWithSubDirectoriesViewModel( DirectorySizeData directory, IEnumerable <DirectorySizeData> subDirectories, ISizeConversion sizeConversion) { _directory = directory; _subDirectories = subDirectories; _sizeConversion = sizeConversion; }
private void ChangeCurrentDirectory(DirectorySizeData directory) { if (directory == null) { return; } _currentDirectory = directory; _currentSubDirectories = GetSubDirectories(directory); }
private void AddOrUpdateLocalSize(DirectorySizeData directorySize) { if (!_directorySizes.TryAdd(directorySize.Path, directorySize)) { DirectorySizeData loadedDirectory; if (_directorySizes.TryGetValue(directorySize.Path, out loadedDirectory)) { loadedDirectory.SetSelfSize(directorySize.LocalSize); } } }
private void AddOrUpdateAncestorSize(string path, long size) { var directory = new DirectorySizeData(path, 0); directory.SetSizeFromDescendant(size); if (!_directorySizes.TryAdd(path, directory)) { if (_directorySizes.TryGetValue(path, out directory)) { directory.SetSizeFromDescendant(size); } } }