private void EnumerateFilesForDirectory(TopNList <DirectorySpaceEnumerator.DirectorySize> topDirsBySize, string dir) { MountPointUtil.HandleIOExceptions(delegate { DirectoryInfo path = new DirectoryInfo(dir); using (DirectoryEnumerator directoryEnumerator = new DirectoryEnumerator(path, false, false)) { ulong num = 0UL; string text; NativeMethods.WIN32_FIND_DATA win32_FIND_DATA; while (directoryEnumerator.GetNextFileExtendedInfo("*", out text, out win32_FIND_DATA)) { ulong longFileSize = this.GetLongFileSize(win32_FIND_DATA.FileSizeLow, win32_FIND_DATA.FileSizeHigh); num += longFileSize; } this.InsertIfNecessary(topDirsBySize, dir, num); } }); }
private IEnumerable <DirectorySpaceEnumerator.DirectorySize> GetTopNDirectories() { TopNList <DirectorySpaceEnumerator.DirectorySize> topDirsBySize = new TopNList <DirectorySpaceEnumerator.DirectorySize>(this.m_maxDirectories, Dependencies.Assert); MountPointUtil.HandleIOExceptions(delegate { DirectoryInfo path = new DirectoryInfo(this.m_rootDirectory); using (DirectoryEnumerator directoryEnumerator = new DirectoryEnumerator(path, true, true)) { Predicate <NativeMethods.WIN32_FIND_DATA> extendedFilter = (NativeMethods.WIN32_FIND_DATA findData) => (findData.FileAttributes & NativeMethods.FileAttributes.ReparsePoint) == NativeMethods.FileAttributes.None; foreach (string dir in directoryEnumerator.EnumerateDirectories("*", extendedFilter)) { this.EnumerateFilesForDirectory(topDirsBySize, dir); } this.EnumerateFilesForDirectory(topDirsBySize, this.m_rootDirectory); } }); return(topDirsBySize); }
private bool InsertIfNecessary(TopNList <DirectorySpaceEnumerator.DirectorySize> topDirsBySize, string dir, ulong dirSize) { DirectorySpaceEnumerator.DirectorySize directorySize = new DirectorySpaceEnumerator.DirectorySize(dir, dirSize); return(topDirsBySize.InsertIfNecessary(directorySize)); }