Удаление одинаковых и похожих по размеру файлов

Demiz

Client
Регистрация
19.12.2017
Сообщения
187
Благодарностей
121
Баллы
43
Добрый день, как можно сравнить и удалить одинаковые и похожие по размеру файлы в одной папке (и оставить только один). Например файл 1 весит 112 233 байт, файл 2 весит 112 230 байт, они одинаковые, но размер чуть отличается только последними 3 цифрами, нужно один удалить(неважно какой), другой оставить.

На форуме нашел сниппет который удаляет только дубликаты по размеру, он работает, но мне нужно еще похожие, которые отличаются последними 3 цифрами.
C#:
var list = project.Lists["files"];
List<string> temp = new List<string>();
for(int i = 0;i<list.Count;i++)
{
string size = Convert.ToString(new FileInfo(list[i]).Length);
    if(temp.Contains(size))
    {
        System.IO.File.Delete(list[i]);
    }
    else
    {
    temp.Add(size);
    }
}
 
Последнее редактирование:

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 433
Баллы
113
Вычитайте одно число из другого, берите модуль и сравните разницу, скажем, с числом 5.
 
  • Спасибо
Реакции: Demiz

Demiz

Client
Регистрация
19.12.2017
Сообщения
187
Благодарностей
121
Баллы
43
Вычитайте одно число из другого, берите модуль и сравните разницу, скажем, с числом 5.
интересное решение, но файлов у меня не 2, чтобы просто вычесть одно число из другого, их может быть сотни, тогда не пойму как мне каждый файл с другими сотнями сравнивать и его вычитать? В идеале бы подправить сниппет выше, но знаний шарпа не хватает
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 433
Баллы
113
Сначала отсортируйте их по размеру и тогда в списке файлы с похожими размерами будут рядом.
Примерно так:

C#:
DirectoryInfo dir = new DirectoryInfo("путь_к_папке");
List<FileInfo> fi = dir.GetFiles().ToList();
var files =  fi.Where(f => f.FullName != null).OrderByDescending(f => f.Length);
И потом в цикле сравнивайте первый элемент и следующий.
 
  • Спасибо
Реакции: Demiz

Demiz

Client
Регистрация
19.12.2017
Сообщения
187
Благодарностей
121
Баллы
43
Получаю список файлов с таким списком
89737

Последние цифры это и есть размер файлов, стандартная сортировка кубиком неправильно сортирует. Есть вариант на С#? Выше со сниппетом не разобрался
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 115
Баллы
113
Последние цифры это и есть размер файлов, стандартная сортировка кубиком неправильно сортирует. Есть вариант на С#? Выше со сниппетом не разобрался
Имя файла и размер помещайте в Таблицу, в разные колонки, и потом сортируйте по колонке с размерами.
Если же нужно именно со списком работать, то тут есть решение:
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)