示例#1
0
        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);
        }
示例#2
0
        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);
        }