private static CountFilesResponse CreateCountFilesResponse(CountFilesResult countFilesResult, bool cancelled) { return(new CountFilesResponse { FilesGreaterHundred = countFilesResult.FilesGreaterHundred, FilesLessFiftyAndGreaterTen = countFilesResult.FilesLessFiftyAndGreaterTen, FilesLessTen = countFilesResult.FilesLessTen, Timeouted = cancelled }); }
public CountFilesResult CountFilesInDirectory(string path, CancellationToken cancellationToken) { if (!Directory.Exists(path)) { return(null); } var countFilesResult = new CountFilesResult(); new DirectoryInfo(path) .ForceEnumerateFiles() .AsParallel() .TakeWhile(_ => !cancellationToken.IsCancellationRequested) // WithCancellation throws exception, so this variant is cheaper for runtime .ForAll(file => { var fileSizeMb = file.Length / 1024.0 / 1024; if (fileSizeMb <= 10) { countFilesResult.FilesLessTen++; return; } if (fileSizeMb >= 100) { countFilesResult.FilesGreaterHundred++; return; } if (fileSizeMb > 10 && fileSizeMb <= 50) { countFilesResult.FilesLessFiftyAndGreaterTen++; } }); return(countFilesResult); }