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

  • Автор темы Автор темы backoff
  • Дата начала Дата начала

backoff

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

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

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

Возможно ли такое запилить на шарпе или стандартными методами зенки?
 
  • Оценить
Реакции: Radzhab
Пути к фото в папке в список. В цикле они перебираются и на место пути файла пишется его мд5, ну либо размер. Далее запоминаем длину списка.Удаляем дубли. Сравниваем новую длину со старой. Если разнятся - значит были дубли, удаляем папку.
 
В цикле они перебираются и на место пути файла пишется его мд5, ну либо размер
как это запилить? шарпом?

вроде нашел, как определить размер, щас попробую сделать тест
мало ли кому тож пригодится - http://zennolab.com/discussion/threads/opredelit-razmer-fajla.23600/#post-160818
 
Код:
Развернуть Свернуть Копировать
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} - это ваш путь
 
Последнее редактирование:
Код:
Развернуть Свернуть Копировать
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
на первой же итерации сниппет завершится
точно), с конца надо во вложенном цикле
Код:
Развернуть Свернуть Копировать
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 в условие второго цикла
 

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