private HashResult Hash(FileInfo[] input, DirComparatorSide side) { MD5 md5 = MD5.Create(); int totalops = input.Length; int currentop = 0; Dictionary <string, FileInfo> files = new Dictionary <string, FileInfo>(); List <DirComparatorDuplicateFileInfo> duplicates = new List <DirComparatorDuplicateFileInfo>(); foreach (FileInfo file in input) { currentop++; StatusChanged?.Invoke(new DirComparatorStatus() { Side = side, Action = DirComparatorAction.Hashing, CurrentFile = file, CurentOperation = currentop, TotalOperations = totalops }); string hash = Convert.ToBase64String(md5.ComputeHash(file.OpenRead())); if (files.ContainsKey(hash)) { duplicates.Add(new DirComparatorDuplicateFileInfo() { Type = DirComparatorFileInfo.FileType.Duplicate, File = files[hash], Duplicate = file }); } else { files.Add(hash, file); } } return(new HashResult() { Files = files, Duplicates = duplicates }); }
private FileInfo[] Filter(FileInfo[] input, DirComparatorSide side) { int totalops = input.Length; int currentop = 0; List <FileInfo> files = new List <FileInfo>(); foreach (FileInfo file in input) { StatusChanged?.Invoke(new DirComparatorStatus() { Action = DirComparatorAction.Filtering, Side = side, CurentOperation = currentop, TotalOperations = totalops, CurrentFile = file }); if (!ignore.IsMatch(file.FullName)) { files.Add(file); } currentop++; } return(files.ToArray()); }