Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Офтопик
Перезагрузить страницу Утилита сравнения двух каталогов
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 02.11.2009, 16:19

Уважаемые участники.
Подскажите пожалуйста какую-нибудь несложную в использовании, удобную и хорошую программу, которая позволила бы сравнить два каталога на предмет совпадения их содержимого. При этом необходимо, чтобы утилита сравнивала бы не только деревья каталогов и имена имеющихся в них файлов, но и сами файлы между собой, и при этом производила бы не поверхностное сравнение по внешним признакам, таким как длины файлов, время послелнего изменения и т. п., а сверяла бы файлы посимвольно, байт в байт, независимо от их типа, расширения, формата (бинарный, текстовый) и в случае, если директории не тождественны выводила бы сообщение. Всякие излишества, вроде нахождения различий между похожими текстовыми файлами, поиска похожих картинок и т. п., совершенно не нужны.

Чтобы было понятно, о чем идет речь, поясню суть задачи.
Нужно скопировать с диска одного компьютера на диск другого "бесценные" данные: всякие дистрибутивы ОС, программы, электронные книги, музыку и пр. Компьютеры соединены между собой через Ethernet. Так как объем информации очень велик и хотелось бы иметь твердую уверенность, что она сохранена без ошибок, после завершения копирования очень хочу выполнить такую полную проверку. Можно было бы конечно для этой цели использовать консольную команду xcopy, установив верификацию (ключ /v), но когда стал смотреть и разбираться с этой командой, увидел, что она имеет кучу ключей, по умолчанию работает с какими-то выкрутасами: не копирует пустые каталоги, сбрасывает у скопированного файла атрибут "только для чтения", для того, чтобы она этого не делала, необходимо указать два ключа (ключ /s и /e). А поскольку копировать мне много, решил с этой утилитой не связываться, а воспользоваться обычной графической оболочкой Windows, а потом провести такую проверку. Конечно ошибки подобного рода на современном оборудовании редкость, но тем не менее теоретически при таком большом объеме информации они возможны, да и Ethernet-канал с кабелем - дополнительгный источник ненадежности. Просмотрел Интернет, но ничего подходящего для своей задачи не нашел (очень много информации в общем). Буду рад, если посоветуете какую-нибудь программку. Можно и с графическим интерфейсом, можно и консольную, так чтобы она четко и корректно работала с минимумом усложнений и всяческих наворотов.

Программа нужна под Windows XP.
Можно было бы конечно написать подобную программку и самому, но не хочется убивать на это время.
Ответить с цитированием
  (#2 (permalink)) Старый
Jonano Jonano вне форума
Специалист
 
Аватар для Jonano
 
Сообщений: 3,541
Сказал(а) спасибо: 2
Поблагодарили 14 раз(а) в 14 сообщениях
Регистрация: 19.04.2005
По умолчанию 02.11.2009, 16:36

Для этих целей можно использовать WinDiff, но не очень удобно. Можно ещё Visual SourceSafe, там эта утилита встроена, очень удобная. Но он платный. Другое не юзал.
Ответить с цитированием
  (#3 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 02.11.2009, 16:41

Jonano, а что такое WinDiff? Программа, команда Cmd.exe? Что за ПО такое Visual SourceSafe, естественно вкратце? Хороша там эта утилита?

Извиняюсь за вопросы, потому и спрашиваю, что не знаю, а решить проблему хотел бы в кратчайший срок (если полезу в поисковики, то это может занять очень много времени и нет никакой гарантии, что найду что-то подходящее).
Ответить с цитированием
  (#4 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 02.11.2009, 18:40

Цитата:
Уважаемые участники.
Подскажите пожалуйста какую-нибудь несложную в использовании, удобную и хорошую программу, которая позволила бы сравнить два каталога на предмет совпадения их содержимого. При этом необходимо, чтобы утилита сравнивала бы не только деревья каталогов и имена имеющихся в них файлов, но и сами файлы между собой, и при этом производила бы не поверхностное сравнение по внешним признакам, таким как длины файлов, время послелнего изменения и т. п., а сверяла бы файлы посимвольно, байт в байт, независимо от их типа, расширения, формата (бинарный, текстовый) и в случае, если директории не тождественны выводила бы сообщение. Всякие излишества, вроде нахождения различий между похожими текстовыми файлами, поиска похожих картинок и т. п., совершенно не нужны.
Araxis Merge.
Правда, различия в файлах вменяемо она показывает только для текстовых файлов, т.к. для бинарных файлов эта операция особого смысла не имеет.
Ответить с цитированием
  (#5 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 02.11.2009, 19:10

Garik. А бинарные файлы-то эта программа умеет сравнивать между собой побайтно на предмет совпадают - не совпадают? Естественно находить в них различия бессмысленно, но мне этого и не нужно. А файлы меня в силу описманной проблемы интересуют в первую очередь бинарные, ну и текстовые, где они есть, тоже не меньше.

Второй не менее важный момент. Нужно, чтобы утилита сравнивала не только пары отдельных файлов, но и проводила сравнение всех файлов в каталогах в автоматическом режиме. Умеет ли это делать данная программа (Araxis Merge)?


P. S.
Одна просьба к ув. участникам. Если вам есть, чего подсказать, объяснить мне за короткий срок, буду вам очень благодарен. Если ничего, кроме "Посмотри в Гугле", вы сказать не в состоянии - проходите мимо, я не хочу на таких собеседников терять свое время. Извините, что вышло так резко.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Alexiski Alexiski на форуме
Любитель давать советы
 
Сообщений: 4,266
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 03.11.2009, 01:35

Все перечисленное умеют делать TotalCommander и Far

Upd. Araxis Merge отлично сравнивает двоичные файлы, но это здесь, скорее, стрельба из пушки по воробьям.
Ответить с цитированием
  (#7 (permalink)) Старый
AfIS AfIS вне форума
Member
 
Сообщений: 384
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.02.2005
По умолчанию 03.11.2009, 03:39

Цитата:
Все перечисленное умеют делать TotalCommander и Far
Я пользуюсь TotalCommander`ом для синхронизации своих проектов на Делфи между 2-мя ПК через флешку. Просто копируешь и при запросе перезаписи отвечаешь копировать только новые. Всё. Никаких проблем не замечал. Смотрит Тотал только по времени файла, ничего побайтно не сравнивает. Это и не нужно. Matematic, ты усложняешь задачу, мне кажется.
Ответить с цитированием
  (#8 (permalink)) Старый
Vladimir the Red Sunny Vladimir the Red Sunny вне форума
Member
 
Сообщений: 4,232
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 15.05.2003
По умолчанию 03.11.2009, 06:37

Ну я не знаю такой программы. А что, поиск в Гугле ничего не дал? :?
Ответить с цитированием
  (#9 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 03.11.2009, 07:59

Цитата:
Смотрит Тотал только по времени файла, ничего побайтно не сравнивает. Это и не нужно. Matematic, ты усложняешь задачу, мне кажется.
AfIS, но ведь мне нужно как раз сравнить все файлы побайтно. TC у меня есть и это было первое средство, которым я попытался воспользоваться, но сразу же убедился, что директории он сравнивает по именам и по имеющимся отличиям в размерах и датах изменения файлов, это стало сразу же понятно по мгновенной скорости сранения двух больших каталогов. А это мне не нужно. Мне нужно именено побайтное сравнение всех файлов в каталогах и подкаталогах. Зачем, см. мой первый пост в теме, там я описал проблему. Конечно, любой из вас мне может возразить, что надежность современных винчестеров, материнок, контроллеров настолько высока, что этим заниматься не стоит, что вероятность возникновения ошибки и искажения даже при передаче через Ethernet-канал ничтожно мала, даже при огромном объеме переданной и записанной информации. Тем не менее я очень хочу провести такую проверку.


Цитата:
Ну я не знаю такой программы. А что, поиск в Гугле ничего не дал? :?
Да смотрел я в поиске, правда в Яндексе, но ни все ли равно? Очень много ответов нашлось на мой вопрос, куча всяких аналогичных программ от всевозможных производителей. Правда такое изобилие сбило меня с толку, да и в описаниях упор в основном делается на возможность сравнения не каталогов, а двух текстовых файлов между собой с выводом отличий в два окна. Это меня не интересует в данном случае. А умеет ли программа делать в точности то, что мне надо, я из этих описаний не понял. Может быть они это делают также поверхностно, как и Total Commander. Разыскивать же 5 - 6 похожих друг на друга по функциональности программ, скачивать их все, разбираться с пользовательским интерфейсом каждой, выяснять делает ли она сравнение в таком виде, как я хочу, не очень то хочется. Вот и обатился с вопросом на форум, надеясь, что кто-то из Вас когда-то сталкивался с подобной несложной проблемой, знает программы и утилиты, элементарно ее решающие. Но чувствую, ответа здесь не дождусь: желающих поучить будет хоть отбавляй, а помочь или посоветовать что-то дельное не найдется. Хотя проблема-то простейшая.
Ответить с цитированием
  (#10 (permalink)) Старый
AfIS AfIS вне форума
Member
 
Сообщений: 384
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.02.2005
По умолчанию 03.11.2009, 08:52

Ну если так закоснелось... Тогда напиши сам прогу. Пусть она состоит из клиентской и серверной части. На TCP/IP. Этот протокол уже сам проверяет целостность передачи, так что канал будет надёжен. Одна часть (пусть клиент) сканирует рекурсивно выбранный каталог и сверяет со структурой от серверной части. Если файл не найден на той или иной стороне, то выдаётся об этом сообщение (и например автоматически копируется на ту часть, где его нет). Если файл есть, но размер различен, выдаём сообщение. Если файл есть и размеры совпадают, то сравниваем ещё и по содержимому. Для уменьшения трафика можно разбивать его на блоки (по нескольку кБ) и сравнивать по контрольным суммам блоков. Если все суммы одинаковы, то файлы идентичны, иначе передаются отличающиеся блоки. Так, например, если изменён/дописан только конец файла, то и переслан будет только последний блок, а не весь файл.
Ответить с цитированием
  (#11 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 03.11.2009, 09:03

AfIS, это-то можно сделать.
Только непонятно зачем усложнение с клиентом и сервером и Интернет-протоколом. Мне кажется, что в таком случае гораздо проще написать программу, просто сравнивающую два различных каталога на разных дисках. Если к дискам и каталогам установлены права общего сетевого доступа, то тот факт, что они расположены на разных компьютерах не будет помехой, ОС они будут восприниматься как одно и то же. Все проблемы с файловой системой, с ее абстрактным представлением, с передачей содержимого файлов и каталогов по сети лягут на ОС, прикладная программа просто нек будет об этом знать. Прикладную же программу можно будет запускать на одном из компьютеров. Клиент-серверная система нужна только, если к дискам или каталогам нет общего сетевого доступа, но это не проблема. Или я в чем-то не прав.
Ответить с цитированием
  (#12 (permalink)) Старый
AfIS AfIS вне форума
Member
 
Сообщений: 384
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.02.2005
По умолчанию 03.11.2009, 09:06

Вообще-то я так и не понял обоснования. Если ты копируешь TotalCommander`ом, и говоришь "Заменит всё", то он тебе и по сети передаст всё ТОЧНО. Что за паранойя? Я понимаю если бы не было никакой проверки в канале передачи или при записи на диск. Как ты хотел воспользоваться Виндовым копированием, так и надо было сделать. Ошибки "в кабеле" и потеря пакетов устраняется программно на одном из уровней самого протокола TCP/IP. С учётом буферизации дисковых операций тебе наврядли поможет простое чтение после записи. Короче канал надёжен! Открой два окна Проводника и перетащи мышкой, что нужно. А вероятность сбоя, которую ты попытаешся устранить дополнительной программой, вернётся за счёт ввода этой самой программы, как дополнительного элемента - источника сбоя.
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
AfIS AfIS вне форума
Member
 
Сообщений: 384
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 08.02.2005
По умолчанию 03.11.2009, 09:09

Цитата:
AfIS, это-то можно сделать.
Только непонятно зачем усложнение с клиентом и сервером и Интернет-протоколом. Мне кажется, что в таком случае гораздо проще написать программу, просто сравнивающую два различных каталога на разных дисках. Если к дискам и каталогам установлены права общего сетевого доступа, то тот факт, что они расположены на разных компьютерах не будет помехой, ОС они будут восприниматься как одно и то же. Все проблемы с файловой системой, с ее абстрактным представлением, с передачей содержимого файлов и каталогов по сети лягут на ОС, прикладная программа просто нек будет об этом знать. Прикладную же программу можно будет запускать на одном из компьютеров. Клиент-серверная система нужна только, если к дискам или каталогам нет общего сетевого доступа, но это не проблема. Или я в чем-то не прав.
Так и я о том же! Не морочь себе голову. Копируй проводником! Это достаточно надёжно.
Я предлагал наладить свой канал между двумя прогами (а не Самба виндовая), так как ты писал, что тебя настораживает "... Ethernet-канал с кабелем - дополнительгный источник ненадежности".
Ответить с цитированием
  (#14 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 03.11.2009, 09:42

AfIS, ни о какой программе, дополнительно проверяющей сетевой канал передачи по протоколу, служащей посредником между программным обработчиком/дешифратором сетевого трафика по протоколу (как уж он, этот дешифратор потока, по правилам называется, я не знаю) и прикладным ПО, речи и в помине нет. Это и сложно, и ни к чему, и у меня, если уж честно, нет достаточных знаний ОС и сети, чтобы написать подобное сейчас самому. Да это и бессмысленная затея.

Все гораздо проще.
Я хочу скопировать каталог (или раздел диска) с одного компьютера на другой с помощью обычного проводника Windows. А после этого запустить проверку, которая бы сравнила бы содержимое обоих каталогов, каждый содержащийся в них файл побайтно, чтобы установить, что копирование произошло без ошибок. Все!

Задача элементарная, участвовать в дискуссии на предмет нужна или не нужна такая проверка, не хочу. Вопрос единственный - есть ли такая утилита, которая бы позволила выполнить эту проверку в таком виде, как я хочу, и без особых сложностей и если есть, подскажите название.
Ответить с цитированием
  (#15 (permalink)) Старый
Garik Garik вне форума
Member
 
Сообщений: 6,201
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Регистрация: 07.06.2002
По умолчанию 03.11.2009, 10:34

Matematic, да, Araxis Merge сравнивает и директории. И умеет сравнивать бинарные файлы побайтно.
В более простом варианте, как тебе уже выше подсказывали, это умеют делать FAR и Total Commander - правда в этом случае выдается бинарный результат - файл совпадает или не совпадает. Но ведь именно это тебе и нужно, если я правильно понял.
Так попробуй эти утилиты! FAR бесплатный, TC - условно бесплатный.
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синхронизация каталогов (Assembler, FASM) rolex123 Assembler 0 23.04.2012 12:28
Программа для сравнения двух BMP-файлов 5neverthesame94 Вопросы начинающих программистов 9 02.04.2012 22:29
WinDirStat - Статистика каталогов Artem_UA Накопители 0 07.12.2011 13:40
Рекурсивное удаление каталогов dkm С/С++ 2 08.01.2010 20:19
Переустановка XP копированием её каталогов Virgil Windows XP 4 21.03.2009 17:46
Быстрый Алгоритм сравнения двух массивов AcerExtensa С/С++ 6 21.07.2008 11:38
Структура каталогов, ZLib minizip vilru С/С++ 1 10.02.2008 18:44
Создание дерево каталогов BaRaDeD C++ Builder 2 20.04.2006 20:06
Алгоритм сравнения двух текстов :shock: rutman Visual Basic 0 28.10.2004 14:41
Определение каталогов по запросу Icer Visual C++ 1 09.01.2004 10:05
Исключение каталогов по маске в ARJ Anonymous Вопросы начинающих программистов 0 08.09.2003 11:34
Алгоритм сравнения двух файлов Excel Anonymous Visual Basic 4 07.03.2003 22:09



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов