Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Програма для поиска дублирующих файлов  (Прочитано 22274 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
Dmytry
Гость
« : 15-09-2009 14:37 » new

Всем привет!У меня возникла такая проблема. Мне нужн онаписать программу в Visual studio 2008, которая выполняет поиск дублирующихся файлов в каталоге или на логическом диске. программа должна предоставлять следующие возможности:
·   выполнение поиска файлов, которые дублируются, в заданном пользователем адресном пространстве (логическом диске или каталоге);
·   сообщение пользователя о найденных дубликатах; возможность навигации между ними;
·   сжатие файлов-дубликатов за алгоритмом GZIP.
 Общие требования интерфейса программы (обязательные элементы):
·   поле введения адресного пространства, в котором будет выполняться поиск дубликатов;
·   форма с перечнем найденных файлов, которые дублируются, с возможностью их открытия прямо из дополнения (например, двойным нажатием левой кнопки мыши);
·   если несколько текстовых файлов имеют дубликаты, то они должны каким-то образом группироваться; например, на диске присутствуют два одинаковых файла - С:\doc\text1.txt но C:\temp\my\text11.txt, а также на этом диске есть еще три файла, которые дублируются, - С:\doc\text2.txt, C:\temp\text.txt но C:\temp\my\text2.txt; тогда пользователю должны представиться две группы файлов, которые дублируются, - text1.txt и text2.txt (названия групп могут быть любые); причем пользователь должен иметь возможность самому избрать из группы файл-оригинал и файл(и) -дублікати;
·   у пользователя должна быть возможность сжатия дубликатов за алгоритмом GZIP (за его желанием).

Прошу помогите кто нибуть, незнаю с чего начать.Существует ли какой то алгоритм поиска дублирующихся файлов и по каким критериям вообще производить поиск дублирующихся файлов?.Visual Studio 2008 уже установил, но незнаю что делать дальше  и с чего начинать:-/ Здесь была моя ладья... Здесь была моя ладья...
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 15-09-2009 15:31 » 

Прошу помогите кто нибуть, незнаю с чего начать.Существует ли какой то алгоритм поиска дублирующихся файлов и по каким критериям вообще производить поиск дублирующихся файлов?.Visual Studio 2008 уже установил, но незнаю что делать дальше  и с чего начинать:-/ Здесь была моя ладья... Здесь была моя ладья...
Считай контрольные суммы файлов (например md5) и сравнивай их. Соответственно если контрольные суммы двух файлов совпадают, значит они одинаковые.
Записан
Dmytry
Гость
« Ответ #2 : 15-09-2009 15:40 » 

А md5 - это я так понимаю хеши?....А есть какая нибуть функция что б извлекать хеши из файлов?
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 15-09-2009 15:54 » 

А md5 - это я так понимаю хеши?....А есть какая нибуть функция что б извлекать хеши из файлов?
Смотри RFC описание алгоритма подсчета MD5: RFC 1321. Там так же есть реализация данного алгоритма на C.
Записан
Dmytry
Гость
« Ответ #4 : 15-09-2009 15:55 » 

Спасибо огромное..буду пытаться разбираться!
Записан
Dmytry
Гость
« Ответ #5 : 16-09-2009 15:35 » 

Почитал по совету хеширование файлов...Смысл вроде уловил но не могу понять(может пропустил), как же узнать сам хеш проверяемого файла то есть как извлечь из файла програмно его хеш и потом с ним работать??Подскажите пожалуйста, может есть какая то функция на С++ конкретная для извлечения хеша из заданого файла?
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 16-09-2009 16:32 » 

Почитал по совету хеширование файлов...Смысл вроде уловил но не могу понять(может пропустил), как же узнать сам хеш проверяемого файла то есть как извлечь из файла програмно его хеш и потом с ним работать??Подскажите пожалуйста, может есть какая то функция на С++ конкретная для извлечения хеша из заданого файла?
Открывай файл на чтение и прогоняй данные из него через функцию расчета md5. После прогона через md5 всего файла, получишь сумму md5 для данного файла.
Записан
Dmytry
Гость
« Ответ #7 : 16-09-2009 17:15 » 

Ага, вроде понял. Спасибо!!..А вот скажи, такое(подсчет хеша) можно проделывать не только с текстовыми файлами а и например файламимультимедиа и exe-файлами??...И как можно допустим не програмно посмотреть шеш файла(ну что б удостоверится что хеш пренадлежит именно этому файлу), может какая прога специальная есть??
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 16-09-2009 17:22 » 

Ага, вроде понял. Спасибо!!..А вот скажи, такое(подсчет хеша) можно проделывать не только с текстовыми файлами а и например файламимультимедиа и exe-файлами??
Считать контрольную сумму можно любого файла.

И как можно допустим не програмно посмотреть шеш файла(ну что б удостоверится что хеш пренадлежит именно этому файлу), может какая прога специальная есть??
В 'Total Commander' есть пункт в меню 'Подсчитать CRC-сумму' (md5 или SFV).
Записан
Dmytry
Гость
« Ответ #9 : 17-09-2009 05:52 » 

Спасибо еще раз!!!..Буду разбираться.
Записан
Dmytry
Гость
« Ответ #10 : 11-10-2009 19:01 » 

Здравствуйте еще раз!...Как и раньше не могу решить проблему с нахождением MD5 -хеша файла. Нашел исходники:
http://cms.xd24.ru/md5.aspx.Может покажется смешным ,но никак не могу откомпилировать.Помогите пожалуйста кто нибуть.Очень нужно решить эту проблему!!
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #11 : 11-10-2009 19:26 » 

Где именно у тебя компилятор ругается?. У себя проверил, компилятор вроде все скушал.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dmytry
Гость
« Ответ #12 : 11-10-2009 19:38 » 

А вы на чем компилировали и какой проэкт создавали скажите ,если не трудно?(я компилировал на Visual Studio 2008, создавал проэкт MFC)
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #13 : 11-10-2009 22:56 » 

Это не важно, какой проект. Создаеш 2 файла. Один md5.cpp и второй md5.h Подключаеш их к проекту. Теперь осталось только сделать copy-paste соответствуюших частей из приведенной тобой ссылки. И компилировать.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #14 : 12-10-2009 16:12 » 

Сейчас проверил работу данной библиотеки. В файле md5.cpp нужно подправить подключаемую библиотеку. Заместо #include  <string> Нужно написать #include  <string.h>. Это две разные библиотеки.
Ну и код использования
Код:
    md5::md5_context ctx;    // Тут будут зранится промежуточные результат контрольной суммы.
    md5::md5_starts(&ctx);   // Иницилизируем и выставляем в начальное состояние контрольную сумму.
    unsigned char ch[]="To be or not to be.\n";
    md5::md5_update(&ctx,  ch, strlen((const char *)ch));  // Сам подсчет контрольной суммы, можно использовать последовательно несколько кусков
    unsigned char diggest[16];
    md5::md5_finish(&ctx,diggest); // В Массив diggest будет выташена контрольная сумма.
    for(int i=0; i<16; i++)                          //печатаем
    {
        if (diggest[i]<16) printf("0");
        printf("%X", diggest[i]);
    }
    printf("\n");
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dmytry
Гость
« Ответ #15 : 19-10-2009 18:02 » 

Спасибо огромное..буду пробовать!!!..вот у меня сдесь возник еще вопрос..мне нужно сделать такую вещь: нужно осуществить поиск всех текстовых файлов(txt) по заданому каталогу..то есть пользователь вводит путь к каталогу(например С:\documrnts), происходит поиск всех текстовых файлов в этом каталоге и на экране появляется список этих фалов....при этом желательно ,что б имена файлов сохранялись в  строковый масив для того ,что б их потом можно было посортировать....Подскажите к тонибуть, с чего мне начинать, какие функции использовать?? Может даже какой нибуть вариант алгоритма предложит, буду только за!!...да еще...желательно ,что функции были на языке С#
Записан
Dmytry
Гость
« Ответ #16 : 23-11-2009 19:20 » 

Продолжаю работу над своей программой. Есть исходник написанного мной куска программы на С#:
вот он   http://files.mail.ru/LC6PT7

На данном этапе моя программа по задающемуся пользователем пути   отыскивает в каталогах текстовые файлы (*.txt), находит по алгоритму md5 хэш каждого файла сводя их в массив строк и выводя в отдельном текстовом поле формы программы(listbox1). Так вот у меня возникла проблема с тем  ,что б потом из полученного масcива из хэшов найти одинаковые строки, свести их в новый массив и вывести в другое строковое поле listbox2.

Может кто-нибудь подскажет ка решить мою проблему...буду премного благодарен. Дело в том что я застрял  даже на том ,ч тоне могу получить элементарный контроль над массивом - пытался вывести первую строку...ничего не получилось -почему то выводило все строки сразу.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #17 : 23-11-2009 19:36 » 

Ну самый простой способ поиска совпадений, Это отсортировать массив. И затем только останется пройтись по массиву, чтобы выбрать совпадаюшие кеши. Они будут лежать последовательно, после сортировки.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dmytry
Гость
« Ответ #18 : 23-11-2009 20:32 » 

Спасибо за совет.....я тоже подумывал о сортировке...Но вся загвоздка в том ,что я не могу получить доступ к масиву - не могу им управлять, не могу получить доступ к отдельным строкам...он выводится...вроде правильно....построчно но вот захватить строки для манипуляции ими и работы у меня не получается А черт его знает...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines