private void determineFilesLength(FileInfo[] files, FileCounterContainer fileCounter) { // Check file length to count them by length. if (files != null) { // Synchronize threads. lock (sync) { // Check files size, count them by category. foreach (FileInfo fi in files) { if (fi.Length <= Mb10) { fileCounter.FileUnder10MbCounter++; } if (fi.Length > Mb10 && fi.Length <= Mb50) { fileCounter.File10To50MbCounter++; } if (fi.Length >= Mb100) { fileCounter.FileOver100MbCounter++; } } } } }
private FileCounterContainer countFiles(string root) { FileCounterContainer fc = new FileCounterContainer(); DirectoryInfo rootDir = new DirectoryInfo(root); walkDirectoryTree(rootDir, fc); return(fc); }
private FileCounterContainer countAllFiles() { FileCounterContainer fc = new FileCounterContainer(); // To search in the entire host. string[] drives = Environment.GetLogicalDrives(); Parallel.ForEach(drives, d => { DriveInfo di = new DriveInfo(d); DirectoryInfo rootDir = di.RootDirectory; walkDirectoryTree(rootDir, fc); }); return(fc); }
private void walkDirectoryTree(DirectoryInfo root, FileCounterContainer fileCounter) { FileInfo[] files = null; DirectoryInfo[] subDirs = null; FolderContentsGrabber fcg = new FolderContentsGrabber(); files = fcg.GetFilesFromDirectory(root); determineFilesLength(files, fileCounter); subDirs = fcg.GetSubdirectories(root); // Recursive call. if (subDirs != null) { Parallel.ForEach(subDirs, sd => { walkDirectoryTree(sd, fileCounter); }); } }