Сравнение (поиск) одинаковых файлов

backoff

Client
Регистрация
20.04.2015
Сообщения
5 931
Благодарностей
6 389
Баллы
113
Приветы.
Столкнулся с такой проблемой, при парсинге фоток из ВК некоторые дублируют фотки, и получается что фото абсолютно одинаковое, но путь к нему разный, и проверить на стадии парса не совсем понимаю как можно сделать, если вообще можно.

Появилась другая мысль, так как на компе фотки по размеру абсолютно идентичны, то их можно вычислять.

Задача такая.
Есть много папок с фотками. Зинаида Михална проходится по всем папкам и берет путь к фото, если в папке есть хотя бы 2 одинаковых фотоки, то Зинаида удаляет папку целиком.

Возможно ли такое запилить на шарпе или стандартными методами зенки?
 
  • Спасибо
Реакции: Radzhab

doc

Client
Регистрация
30.03.2012
Сообщения
8 614
Благодарностей
4 602
Баллы
113
Пути к фото в папке в список. В цикле они перебираются и на место пути файла пишется его мд5, ну либо размер. Далее запоминаем длину списка.Удаляем дубли. Сравниваем новую длину со старой. Если разнятся - значит были дубли, удаляем папку.
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 931
Благодарностей
6 389
Баллы
113
В цикле они перебираются и на место пути файла пишется его мд5, ну либо размер
как это запилить? шарпом?

вроде нашел, как определить размер, щас попробую сделать тест
мало ли кому тож пригодится - http://zennolab.com/discussion/threads/opredelit-razmer-fajla.23600/#post-160818
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 956
Благодарностей
781
Баллы
113
Код:
using System;
using System.IO;
Код:
DirectoryInfo di = new DirectoryInfo({pathToDirectory});
FileInfo[] fiArr = di.GetFiles();
for (int i=0; i<fiArr.Length; i++)
{
for (int j=0; j<fiArr.Length; j++)
{
if (fiArr[i].Length==fiArr[j].Length)
{
string pathToDirectory = {pathToDirectory};
bool recursive = true;
bool startupPath = false;
FileSystem.DirectoryDeleteDirectory(pathToDirectory, recursive, startupPath);
break;
}
}
}
как то так . {pathToDirectory} - это ваш путь
 
Последнее редактирование:

doc

Client
Регистрация
30.03.2012
Сообщения
8 614
Благодарностей
4 602
Баллы
113
Код:
using System;
using System.IO;
Код:
DirectoryInfo di = new DirectoryInfo({pathToDirectory});
FileInfo[] fiArr = di.GetFiles();
for (int i=0; i<fiArr.Length; i++)
{
for (int j=0; j<fiArr.Length; j++)
{
if (fiArr[i].Length==fiArr[j].Length)
{
string pathToDirectory = {pathToDirectory};
bool recursive = true;
bool startupPath = false;
FileSystem.DirectoryDeleteDirectory(pathToDirectory, recursive, startupPath);
break;
}
}
}
как то так . {pathToDirectory} - это ваш путь
на первой же итерации сниппет завершится
 
  • Спасибо
Реакции: arhip1985

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 956
Благодарностей
781
Баллы
113
на первой же итерации сниппет завершится
точно), с конца надо во вложенном цикле
Код:
DirectoryInfo di = new DirectoryInfo({pathToDirectory});
FileInfo[] fiArr = di.GetFiles();
for (int i=0; i<fiArr.Length; i++)
{
for (int j=fiArr.Length-1; j>=0; j--)
{
if (fiArr[i].Length==fiArr[j].Length&&i!=j)
{
string pathToDirectory = {pathToDirectory};
bool recursive = true;
bool startupPath = false;
FileSystem.DirectoryDeleteDirectory(pathToDirectory, recursive, startupPath);
break;
}
}
}
хотя не только, надо просто добавить &&i!=j в условие второго цикла
 

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