Lord_of_Darkness мысли вслух по поводу сравнения файлов:
Сравнивать файлы для проверки идентичности нужно побитно(побайтно ) полюбому, но не все, а только у которых есть определённые одинаковые атрибуты.
Этими атрибутами могут быть: размер, crc (или ещё каким нибудь хешем). Строить внутреннюю таблицу из этих пар (+ имя файла конечно) а потом в одинаковых строках сравнивать уже содержимое. Можно делать два разных хеша - больше вероятность одинаковых файлов при совпадении строк, хотя она и так очень не маленькая.
Минусы данного подхода:
1. Построение таблицы (память может кушаться сильно, хотя в 20мб может такая табица уместиться, что... ого-го-го, а 20 мб для проги сейчас уже не очень много).
2. Минимум один раз все файлы для архивации всётаки придёться прочитать
PS: на твою лс не ходил, прочитал, из обсуждения понял что может быть не лишним и высказаться
Добавлено спустя 9 минут, 21 секунду: можно конечно оптимизировать чтобы не все файлы читать (читать получать хеши и сравнивать только файлы с одинаковыми размерами)
Суть проблемы: если в бат файле пишешь MKDIR "a\b\новая папка\" то папки a и b создаются нормально, а имя "новая папка" отображается неверно (квадратиками и т.д.).
Ты наверное слова Новая папка писал в кодировке win1251?
Дело в том, что консольные команды, каковой является команда MKDIR, используют кодовую страницу 866 (досовскую), а программу ты наверника не в ДОСе писал .
Воспользуйся функциями API, а не консольной командой.
Lord_of_Darkness посмотрел прогу.
А как ей пользоваться? Она создаёт файл RestoreFiles.bat и больше ничего не делает, может что не так? Она не удаляет (это есть гуд) и вроде как не делает (не видно) списка файлов которые нужно заархивировать, батничек для восстановления как уже сказал создаёт.
Member
Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
DenisMak
Код:
Программа ищет в заданной директории идентичные файлы (по размеру, имени, контрольной сумме, производит их побайтное сравнение), и устанавливает для всех неидентичных файлов атрибут архивный, а для остальных - этот атрибут снимается. Параллельно формируются два лог-файла, в одном перечислены все найденные файлы, в другом - все идентичные. Далее эту директорию можно заархивировать, предварительно включив в архиваторе (например в WinRar) опцию "Добавлять только с атрибутом "Архивный"" на вкладке "Резервные копии". Файлы, не включенные в архив, можно восстановить, запустив файл RestoreFiles.bat, который находится в указанной для анализа директории.
Похоже надо писать подробный Readme ... и добавить создание списка файлов для архивации.
Добавлено спустя 3 минуты, 10 секунд: PS Я был-бы совсем не против если-бы кто-нибудь еще высказался по поводу дальнейшего развития сабжа
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Тестирование PreArh+7z не проводилось, т.к. 7z не имеет опции "архивировать только файлы, имеющие атрибут архивный" (по крайней мере я не знаю как ее включить),
А зачем зацикливаться на атрибутах. Проще список составить, как я тут несколько раз уже предлагал. Для большинства пользователей словосочетание "атрибут 'архивный'" мягко говоря будет не очень понятно
Цитата:
И последний вывод:
Если архивируется папка в которой нет (или очень мало и незначительного размера) одинаковых файлов, то предархиватор просто будет либо бесполезен, либо даже в некоторых случаях вреден для размера финального архива.
Скорее, вреден не для размера, а для времени, затраченного на архивирование.
member+
Статус: Не в сети Регистрация: 16.01.2004 Откуда: Estonia,Tallinn
Как я и говорил, так и получилось
Цитата:
я уверен что это хорошая идея
Но увы судя по графику выгода в твоей фишке реальна но не идеальна, поздравляю, это можно сказать успех.
Замерь кстати скорость во всех случаях (т.е повтори опыт с точностью как и было) но составь ещё и график скорости.
Advanced member
Статус: Не в сети Регистрация: 30.08.2003 Откуда: Санкт-Петербург
Цитата:
Если архивируется папка в которой нет (или очень мало и незначительного размера) одинаковых файлов, то предархиватор просто будет либо бесполезен, либо даже в некоторых случаях вреден для размера финального архива.
в наихудшем варианте - теряем (не-)много времени. Размер увеличивается из-за предархиватора незначительно. Меня больше волновала бы совместимость с Линухом, скажем, где коммандный процессор другой и имеет другие команды... скажем, унрар для рара там есть точно а вот command.com или cmd.exe нету эмулятор не предлагать (это неинтересно и в данном случае не очень практично)!
_________________ {:€ дед в законе :-) нородный окодемег почетный пользователь OpenSuSE 11.3 Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad
Member
Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
Тему воскресили из мертвых! Это хорошо xKVtor
Цитата:
Смотрю, на сабжевую тему уже целая статья готова
она у меня на ПС уже не первый месяц валяется, да и на сайте тоже
Цитата:
Проще список составить, как я тут несколько раз уже предлагал.
Эт можно, вот только у меня проблем, компонент, который я для проги юзал остался на DVD, а у меня DVD-ROM'а нету Так что пока никак доработку продолжить не могу А кстати в каком формате список для архивирования должен быть? (в смысле тип и структура файла)
Цитата:
случайно набрел
Если не секрет как? Root
Цитата:
Меня больше волновала бы совместимость с Линухом
Гм, под линух не кодил есче. Просто не знаю как можно при восстановлении файлов без bat-ника обойтись
Добавлено спустя 1 час, 31 минуту, 49 секунд: Статья update + тест на скорость!
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Advanced member
Статус: Не в сети Регистрация: 30.08.2003 Откуда: Санкт-Петербург
Lord_of_Darkness
Цитата:
Гм, под линух не кодил есче. Просто не знаю как можно при восстановлении файлов без bat-ника обойтись
надо уточнить умеет ли рар паковать симлинки и хардлинки. Благо под виндой они тоже есть. Как вариант, писать батник под вин и sh-скрипт (или перловый) под никс. Благо еще и перл вод вынь есть правда, далеко не везде
_________________ {:€ дед в законе :-) нородный окодемег почетный пользователь OpenSuSE 11.3 Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad
Member
Статус: Не в сети Регистрация: 01.06.2003 Откуда: Pskov
Lord_of_Darkness писал(а):
А кстати в каком формате список для архивирования должен быть? (в смысле тип и структура файла)
Кажется, там простой текстовый файл, в каждой строке которого перечислены полное название файла (с указанием пути). Вот только не помню, сохраняется ли структура папок при архивировании...
Lord_of_Darkness писал(а):
Если не секрет как?
Гугль, вроде
Lord_of_Darkness писал(а):
Цитата:
Меня больше волновала бы совместимость с Линухом
Гм, под линух не кодил есче.
И не надо. Пускай со своими линуксами его пользователи сами разбираются Или привлекают авторов архиваторов. Тут бы с виндовым полностью разобраться.
Спорный абзац, который мы с Root'ом процитировали, остался без изменений. Даже в самом худшем случае (отсутствие одинаковых файлов) размер архива при использовании предархиватора никогда не будет больше.
Цитата:
WinRar c Предархиватором почти в шесть! раз быстрее чем 7zip
Такие результаты сильно зависят от выборки Вот если бы несколько выборок потестить...
Добавлено спустя 8 часов, 58 минут, 34 секунды: WinRAR.hlp
файл-список Файлы-списки – это простые текстовые файлы, содержащие имена файлов для обработки. Каждое имя файла должно быть указано на отдельной строке и начинаться с первой позиции строки. В файл-список допускается помещать комментарии, признак начала комментария – символы //. Например, для архивирования файлов *.txt из папки c:workdoc, файлов *.bmp из папки c:workimage и всех файлов из папки c:workmisc можно создать backup.lst, содержащий следующие строки:
После этого для архивирования достаточно будет выполнить команду:
winrar a backup @backup.lst
В одной командной строке разрешается указывать как обычные имена или группы файлов для обработки, так и файлы-списки. Если не указаны ни файлы, ни файлы-списки, то подразумевается шаблон *.* (т.е. WinRAR обработает все файлы).
И еще одна любопытная команда, точнее ключ:
Цитата:
<Ключи> x@<список> -- Не обрабатывать файлы/шаблоны, указанные в файле-списке
Подозреваю, что этот ключ окажется даже более полезным, ведь проще указать полное имя каждого исключаемого файла-дублера.
Цитата:
Пример:
WinRAR a –x@list.txt bin *.exe
Эта команда добавит в архив bin все файлы *.exe, кроме перечисленных в файле list.txt.
Добавлено спустя 11 минут, 56 секунд: 7-zip.chm:
Цитата:
-i (Include filenames) switch Specifies additional include filenames and wildcards. -x (Exclude filenames) switch Specifies what filenames or (and) wildcards must be excluded from operation.
Multiple include switches are supported. Multiple exclude switches are supported.
<file_ref> -- Specifies filenames and wildcards or list file that specify processed files.
List file
You can supply one or more filenames or wildcards for special list files (files containing lists of files). The filenames in such list file must be separated by space, tab or new line symbol(s). Wildcards or filenames with spaces must be quoted.
Multiple list files are supported.
For example, if contents of file "listfile.txt" is the following:
"My programs*.cpp" Src*.cpp
then command
7z a -tzip archive.zip @listfile.txt
adds to archive "archive.zip" all "*.cpp" files from directories "My programs" and "Src".
Добавлено спустя 15 минут, 3 секунды: PkZip, PkZip25:
advanced options: -x@list -- eXclude file(s) in specified list file
Добавлено спустя 37 минут, 11 секунд: Поглядел настройки FAR'а, точнее: Options > PlugIn Configuration > Archive Support > Command Lines ... Можно сделать предварительные выводы о том, какие из архиваторов поддерживают архивирование по спискам (см.ниже). Наверняка большинство из них умеют работать и со списками исключенныхых из архивирования файлов (-x@list.txt), что гораздо полезнее.
Также со списками полных имен файлов работают следующие архиваторы:
ACE32 ARJ32 AIN JAR32 MSCAB IMP
Также со списками коротких имен файлов работают следующие архиваторы:
Member
Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
Новая версия предархиватора, теперь создает 2 файла - первый с хардлинками на файлы, которые нужно включить в архив, второй с хардлинками на исключенные файлы.
ЗЫ статью подправил
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Member
Статус: Не в сети Регистрация: 01.06.2003 Откуда: Pskov
Lord_of_Darkness
Скачал, потестировал немного. Впечатления:
зачем так много опций для в разделе "При сравнении учитывать" ? Сравнивать нужно лишь файлы одинакового размера, причем исключительно побайтно! Все остальные опции совершенно не нужны, и даже вредны.
такое подозрение, что прога неправильно производит сравнение. Оставлял все галки (по-умолчанию). В итоге программа нашла лишь один файл-дубликат, тогда как на самом деле их там гораздо больше! Оставлял всего лишь две галки напротив "размер" и "побайтное сравнение". В итоге многие (а может и все) файлы одинакового размера предархиватор посчитал за дубликаты. Дальше экспериментировать с этой версией не вижу смысла -- буду ждать новую.
не мешало бы описание добавить в архив, или хотя бы ссылку в ReadMe на эту ветку поместить. А то непосявященному человеку совершенно неясно, как и для каких целей пользоваться предархиватором. Почему бы сразу не создавать батник для архивирования (хотя бы для винрара) ? Это вроде несложно сделать...
неплохо было бы такие списки составлять так, чтобы можно было их сортировать в программе по разным полям при просмотре результатов анализа.
можно как-нибудь оптимизировать создание директорий в RestoreFiles.bat ? чтобы не создавать каждый раз одну и ту же директорию для нескольких файлов
ЗЫ: Тестирование проводил с двумя дистрибутивами WinXP: Pro SP1 и hE SP1.
Member
Статус: Не в сети Регистрация: 01.06.2003 Откуда: Pskov
Lord_of_Darkness
Цитата:
Мало-ли кому, что учитывать нужно при сравнении...
Чтобы учитывать, нужно знать, как это работает. Мне, например, не совсем ясно, как учитываются "имя" и "CRC". Можно узнать подробный алгоритм ?
Цитата:
Цитата:
такое подозрение, что прога неправильно производит сравнение.
Посмотрю, но, думаю, врядли.
Так оно и есть на самом деле.
Если запустить прогу, выбрать каталог, кликнуть "Анализ", затем кликнуть "Сжатие", то все нормально работает, претензий нет.
Но если затем убрать галки с пунктов "Имя" и "Контрольную сумму" (+ "Анализ" + "Сжатие"), то программа работает некорректно и возникает описанный мною ранее глюк.
Так что эти навороты с галочками выбора лучше убрать с глаз подальше
Кстати еще один глючек замечен: иногда пропадает первый символ в полном пути файла. Например, вместо "WinXPhe.sp1\..." в батник заносится "inXPhe.sp1\...". Судя по всему, проявляется этот глюк тогда, когда вводится имя директории для поиска, заканчивающееся слэшем. Например: "E:\TestPredarch\" вместо "E:\TestPredarch"
Цитата:
Ну не знаю, может и можно, надо тогда проверку делать, были ли файлы из этой директории уже занесены в bat-ник
проще выделить создание директорий в один батник, а копирование файлов -- в другой. Затем первый отсортировать по возрастанию, убрать повторяющиеся строки (это несложно сделать) и прилепить (append) к нему второй батник (тот, что для копирования).
Добавлено спустя 3 минуты, 36 секунд: UnIncludedFiles = ExcludedFiles -- так покороче будет
Добавлено спустя 6 часов, 54 минуты: ЗЫ: через нескольких часов после отправки сообщения заметил, что из него исчезли ВСЕ обратные слэши "\" Что за бред ? Похоже, это глюк конфы...
Member
Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
xKVtor
Цитата:
как учитываются "имя" и "CRC"
Имя файла№1 = имя файла№2 то считается CRC для обоих и сравнивается. Можно сравнивать только по CRC, но это будет гораздо дольше, т.е. сравнением по имени отсеивается приличное число файлов, и подсчетов CRC нужно делать меньше.
Цитата:
Так что эти навороты с галочками выбора лучше убрать с глаз подальше
Дизайн испортится
Цитата:
UnIncludedFiles = ExcludedFiles -- так покороче будет
это временно
Цитата:
из него исчезли ВСЕ обратные слэши "\"
Бывает такая фигня довольно часто
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения