В заданном каталоге сравнить все файлы по содержимому и вывести список одинаковых - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Есть задача: нужно в заданном каталоге сравнить все файлы по содержимому и вывести список одинаковых. Я начал делать так:
Листинг программы
  1. class SearchEquals
  2. {
  3. public List<string> _pathFiles = new List<string>();
  4.  
  5. public void GetFiles(string path)
  6. {
  7. foreach (var item2 in Directory.GetFiles(path, "*.*", SearchOption.AllDirectories))
  8. {
  9. _pathFiles.Add(item2);
  10. }
  11. _pathFiles.Sort();
  12. }
  13. public Dictionary<long, List<FileInfo>> GetLength()
  14. {
  15. Dictionary<long, List<FileInfo>> groupLengPair = new Dictionary<long, List<FileInfo>>();
  16. List<FileInfo> valueList= new List<FileInfo>();
  17. for (int i = 0; i < _pathFiles.Count; i++)
  18. {
  19. FileInfo fi = new FileInfo(_pathFiles[i]);
  20. for (int j = 0; j < _pathFiles.Count; j++)
  21. {
  22. FileInfo fii=new FileInfo(_pathFiles[j]);
  23. if(!_pathFiles[i].Equals(_pathFiles[j]))
  24. {
  25. if (fi.Length.Equals(fii.Length))
  26. {
  27. if (groupLengPair.TryGetValue(fii.Length, out valueList))
  28. {
  29. valueList.Add(fii);
  30. groupLengPair[fii.Length]=valueList;
  31. }
  32. if (!groupLengPair.TryGetValue(fii.Length, out valueList))
  33. {
  34. valueList = new List<FileInfo>();
  35. valueList.Add(fii);
  36. groupLengPair.Add(fii.Length, valueList);
  37. }
  38. }
  39. }
  40. }
  41. }
  42. return groupLengPair;
  43. }
в Program:
Листинг программы
  1. string path = @"D:\desctop";
  2. SearchEquals search = new SearchEquals();
  3. search.GetFiles(path);
  4. search.GetLength();
столкнулся с проблемой что одни и те же файлы возвращает несколько раз. Похоже что в один и тот же лист файлы добавляются несколько раз. Может кто свежим взглядом посмотрит и подскажет как можно сделать. Спасибо!

Решение задачи: «В заданном каталоге сравнить все файлы по содержимому и вывести список одинаковых»

textual
Листинг программы
  1. // Вместо
  2. if (fi.Length.Equals(fii.Length))
  3.  
  4. // Пишем
  5. if (fi.Length == fii.Length)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.867 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы