public List <SameFilesList> FindWithSameContent(string path) { if (!m_FilesService.DirectoryExists(path)) { throw new DirectoryNotFoundException(path); } var allFiles = m_FilesService.EnumerateFiles(path, "*", SearchOption.AllDirectories); var sameContentComparer = new SameContentComparer(m_FilesService); var orderedFiles = allFiles .Select(f => m_FilesService.GetFileInfo(f)) .OrderBy(f => f, sameContentComparer); var result = ToSameFilesListCollection(orderedFiles, sameContentComparer); return(result); }
public static List <SameFilesList> ToSameFilesListCollection(IEnumerable <FileInfo> orderedFiles, SameContentComparer sameContentComparer) { var result = new List <SameFilesList>(); FileInfo prev = null; var sameFilesList = new SameFilesList(); foreach (var fi in orderedFiles) { if (sameContentComparer.Compare(prev, fi) == 0) { if (sameFilesList.Count == 0) { sameFilesList.Add(prev.FullName); } sameFilesList.Add(fi.FullName); } else { if (sameFilesList.Count > 0) { result.Add(sameFilesList); } sameFilesList = new SameFilesList(); } prev = fi; } if (sameFilesList.Count > 0) { result.Add(sameFilesList); } return(result); }