public static async Task Consume(BufferBlock <object> queue) { while (await queue.OutputAvailableAsync()) { object item = await queue.ReceiveAsync(); if (item.GetType().Equals(typeof(ScanInfo))) { ScanInfo info = item as ScanInfo; folderLogger.Info($"{info.Path}|{info.Size}|1|{info.ErrorMessage}|{DateTime.Now}"); } else { FileInfo file = item as FileInfo; long size = 0; string err = String.Empty; try { size = file.Length; } catch (Exception ex) { err = ex.Message; } fileLogger.Info($"{file.FullName}|{size}|0|{err}|{DateTime.Now}"); } } }
public long GetDirectorySize(DirectoryInfo dir) { ScanInfo folderInfo = new ScanInfo(dir); try { folderInfo.AddSize(dir.EnumerateFiles().Sum(file => { OnScan(file); return(file.Length); })); folderInfo.AddSize(dir.EnumerateDirectories().Sum(folder => { return(GetDirectorySize(folder)); })); } catch (Exception ex) { folderInfo.SetErrorMessage(ex.Message); } OnScan(folderInfo); return(folderInfo.Size); }
protected virtual void OnScan(ScanInfo info) { ItemScanned?.Invoke(this, info); }