Идея: утилитка для восстановления битых файлов!

Тема в разделе "WASM.PROJECTS", создана пользователем Oleg_SK, 7 ноя 2004.

  1. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    Я в ШОКЕ!!! Скачал из интернета за ~6 часов архивный файл (RAR) размером 31Mb, а он получился битым(((((( Потратил свою карточку на пол месяца вперед… Кексы, выложившие его, не только не догадались разбить его на части, но даже не включили в него инфу для восстановления((((((



    Сижу вот, пью пиво с горя. Ладно оставим лирику! Пришла мне мысль слабать утилитку для восстановления файлов в таких случаях. Моя идея зиждется на следующих предположениях:

    1) Этот файл скачало себе куча народа (интересный такой файлик);

    2) Есть возможность (которая вытекает из п.1) найти хотя бы одного человека, у которого этот файл скачался нормально, и который не откажет в помощи!



    Принцип работы утилитки:

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

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

    c) П. запускает у себя эту утилитку в режиме восстановления и скармливает ей три файла: поврежденный, с номерами поврежденных частей и собственно файл содержащий запчасти. Теперь утилитка просто заменяет поврежденные части на новые.;

    d) Ву-а-ля, поврежденный файл восстановлен!

    Причем утилитка должна учитывать и корректно обрабатывать ситуацию, когда эталонный файл и поврежденный будут иметь разный размер. В итоге, я думаю, что файл с запчастями получится значительно легче чем оригинал! Что вы скажете по поводу этой идеи? Может быть, уже существует что-то подобное и не стоит изобретать велосипед?



    З.З.Ы.: Конечно, такую программку можно было бы, в идеале, оформлять не в виде отдельной утилитки, а в виде плагина к архиватору…
     
  2. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    одно плохо - человека с именем С. часто не так просто найти... :dntknw:



    а вообще идея неплохая
     
  3. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    Funbit



    В моем случае речь идет о файле: IDA.Pro.Standard.v4.70.830.with.Flair.and.SDK.rar (ссылку не даю, т.к. это варез). Я думаю, что его себе скачало куча народа... А ремонтный файл, теоретически, должен оказаться крохотным, если размер одного блока будет, к примеру, 4Kb...
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754




    Я вот как-то по диалапу слил intel C compiler (где-то 86+Mb), ReGet с интеловским сайтом как-то хреново работает, в каждом отдельном потоке закачивал начало файла. Дык у меня и получилось 86Мегов этих кусочков по 1-2 Мега начальной информации в одном файле %).

    Это я к чему пишу:

    - ничто так не утешает, как несчастье ближнего =)

    - Как в этом случае поможет утилита ? :derisive:



    ЗЫ: На самом деле в том инталяторе лежит 2 версии - для x86 и IA64, дык во 2й раз я слил себе только первые 52%, съэекономил :)
     
  5. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    S_T_A_S_



    Графа Монте-Кристо цитируешь? :))





    Сформирует ремонтный файл из недостающих блоков и вылечит битый файл:)) А если серьезно, то я и не обещал панацею от всех напастей. Но существует определенный круг проблем, где она действительно в силах будет помочь... Хочу верить, что моя входит в их состав, т.к. это оставляет мне надежду.



    Кстати, я качал этот файл с помощью ReGet Deluxe 4.1 .
     
  6. ava

    ava New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2003
    Сообщения:
    169
    Oleg_SK, а зачем тут специальная навороченная утилита? Описаная ситуация весьма нестандартная и редкая, так что можно и вручную все сделать. Достаточно трех простейших программ - для вырезания блока из файла, для вставки в файл и для расчета контрольных сумм. А дальше - прямые руки и e-mail :)
     
  7. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    Oleg_SK

    да, файлик действительно скачало куча народа, даже у меня есть %)



    если что, могу помочь



    кстати, каков точный размер рар файла?

    (все это лучше в icq)
     
  8. StoneColdCrazy

    StoneColdCrazy New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2004
    Сообщения:
    18
    By the way...

    Насколько мне не изменяет память ;), по описанному принципу работают пиринговые сети...
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Oleg_SK



    В моем рар для 4.7 standart есть recovery record.

    Посмотри, может поможет. И конечно не мешает

    проверить гипотезу, что твой файл просто

    несколько склеенных "начал". Тогда

    твоя метода бесполезна. Проще тогда

    в eMule поколдовать с .met файлами.



    StoneColdCrazy



    Только кусок там ( в eMule) 9 Мб.
     
  10. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Есть уже несколько таких программ.

    1) Zidrav. Вычисляет CRC блоков (по умолчанию 16КБ), и предоставляет несколько вариантов передачи информации из испорченных участков. Примерно то, что вы тут описываете.

    2) Par/Par2. Делает набор файлов с симметричными суммами так, что для восстановления поврежденного участка нужен набор любых контрольных файлов, главное чтобы достаточного суммарного объема. В новых версиях rar тоже появилась такая возможность (.rev файлы).

    3) BitTorrent. Хранит в .torrent файле md5 чексуммы блоков, и докачивает только испорченные блоки.

    Ну и наверно еще есть несколько, про которые я не знаю :)
     
  11. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
  12. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    Привет всем!

    Извиняюсь за задержку с ответом.

    Благодаря тому, что Funbit согласился помочь мне, я все-таки слабал эту программу, хотя ее работа и использование чуть-чуть отличаются от того, что я описал в начале (у меня было время немного подумать над этим на трезвую голову).

    Хочу с радостью сообщить, что я решил свою проблему – файл восстановлен, причем для его восстановления понадобился ремонтный файл размером всего 96.1 Кб.:)))) Я хочу здесь еще раз выразить ОГРОМНУЮ благодарность Funbit’у за помощь!!!



    ava

    Вы правильно заметили, что все это можно сделать и вручную с помощью нескольких утилит. Но вы представляете сколько на это уйдет времени? Основной целью, при создании утилиты была как раз автоматизация этого процесса для сокращения времени требуемого для ремонта файла. IMHO, количество времени необходимое для выполнения какой-либо работы обратно пропорционально количеству людей, которые захотят (или смогут) вам помочь. Особенно это касается тех случаев, когда задача сама по себе этим людям не интересна… Нужно просто помнить о том, что люди здесь в основном занятые и нужно ценить их время…



    valterg и reverser

    Спасибо за ваши ответы. К сожалению (или к счастью) я прочитал ваши посты уже после того, как написал свою программу. В результате, хотя я и не смог благодаря вам сэкономить время, но зато прикольно его провел…

    Из всех указанных вами утилиток меня заинтересовала в основном програмулина – Zidrav, так как она действительно, в общем, очень напоминает мою. Но нужно сказать, что Zidrav – это видимо дальнейшее развитие этой идеи. Хотя я и не представляю, в каких случаях операцию восстановления нужно производить не только над отдельными файлами, но и над группой файлов (которые, как я понял, должны находиться в одной папке), тем не менее эта программка позволяет это делать. Единственное, что меня смущает – это то, что эта утилитка похоже рассчитывает на то, что битый файл и оригинал будут иметь одинаковый размер. Если это условие не соблюдается, то программа сообщает, что отличий между ними ей не найдено… В то же время моя утилитка в такой ситуации будет работать адекватно, т.е. восстановит битый файл (правда, только в том случае, когда размер битого файла меньше чем у оригинального, но обратного я никогда и не видел…). Теперь я подвиду итог в сравнении этих двух утилиток, перечислив все плюсы и минусы Zidrav по сравнению с моей (все это конечно - IMHO).

    Плюсы:

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

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

    3. При работе показывает полоску прогресса. Я же, в своей программе, не стал этого делать, т.к. все происходит очень быстро (буквально несколько секунд для файла размером 31 Mb, на машине: Pentium III 1Ghz, 256 Mb PC133, IDE HDD 30Gb ATA 100 7200 rpm). При необходимости я мог бы это исправить…

    4. Поля ввода позволяют использовать механизм Drag&Drop для указания нужного файла. Я же об этом не подумал, но могу легко это реализовать…



    Минусы:

    1. Относительно большой размер программы – 82 Кб. Размер моей проги – 22 Кб. Причем я мог бы уменьшить размер своей проги примерно в два раза, за счет удаления из ее интерфейса не стандартных элементов управления. Я прикола ради, рисую кнопку вызывающую диалог выбора файла (каталога) внутри поля ввода, с которым она связанна. Но думаю, что при таких размерах это не очень важно.

    2. Не правильно работает, когда размеры битого и эталонного файла различаются (это проверено только для ситуации, когда битый файл меньше чем эталонный)… Я считаю что это - большой минус, т.к. сам довольно часто сталкивался с такими ситуациями.

    3. Мне не понравился ее интерфейс. Уж если программа была написана на Visual C++ (я сужу об этом опираясь на показания - PEiD) то, наверно, стоило бы сделать что ни будь по красивее… Но это мое IMHO.



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

    Вот так, теперь и не знаю: стоит ли развивать свою версию или нет? Нужна ли она кому ни будь? Что скажете?



    Valterg

    Спасибо за ваше стремление помочь!
     
  13. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
  14. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    Oleg_SK

    если что, готов еще раз помочь :)
     
  15. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Oleg_SK

    > Скачал из интернета за ~6 часов архивный файл (RAR) размером 31Mb



    Оказывается бывает скорость пониже моей %)

    У меня за час обычно закачивается 10-12Mb



    S_T_A_S_

    > ReGet с интеловским сайтом как-то хреново работает



    ReGet вообще глюкавая штука :derisive:



    Oleg_SK

    > Кстати, я качал этот файл с помощью ReGet Deluxe 4.1 .



    Ещё одно подтверждение глюкавости :derisive:



    > Да, забыл приаттачить самму программку. Может кому понадобится...



    Угу, и исходники тоже могли бы понадобиться кому-нибудь, тем более после такой рекламы :derisive:



    Кстати, win98 твоя прога вешает намертво, причем сразу же после

    старта, т.е. до каких-либо манипуляций с файлами :derisive:
     
  16. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    Asterix





    Да нет, скорость у меня нормальная, примерно такая же, как и у тебя (33.6). Просто иногда попадаются сервера, закачка с которых идет очень медленно (1.6 Kb/сек - 2.4 Kb/сек). Правда бывали и прямо противоположные случаи, скорость передачи данных была около 7 Kb/сек, а это больше чем я имел на работе, где была выделенка (обычно, у меня скорость держится на уровне 3.2 Kb/сек - 3.6 Kb/сек).





    OK, приаттачиваю, но только сразу говорю, что там ничего не оптимизировано, да и ошибок небось немеряно...





    К сожалению, у меня нет никакой возможности протестировать ее под маздаем...



    [​IMG] 763072464__Lifebuoy.rar
     
  17. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Oleg_SK

    > Просто иногда попадаются сервера, закачка с которых идет очень медленно (1.6 Kb/сек - 2.4 Kb/сек).



    Есть такое дело, мне поэтому пришлось подключиться через прокси провайдера, закачка стала стабильнее. Иногда бывает даже такая скорость(на диалапе естно), приаттачил скрин :derisive:



    > OK, приаттачиваю, но только сразу говорю, что там ничего не оптимизировано, да и ошибок небось немеряно...



    Спасибо, посмотрю на досуге. Ведь не может же прога сразу после старта падать на мастдае %)

    [​IMG] 901562621__FGet.png
     
  18. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    Asterix



    Интересно, может быть мне тоже стоит начать выходить в сеть через проксю провайдера? А средняя скорость передачи данных у тебя возросла или нет (и вообще, какая она у тебя?)? Каким модемом пользуешься (у меня: USR Robotics Sportster Voice 33.6)?



    Asterix



    Да, посмотри, пожалуйста, и если что найдешь, то сообщи. Мне кажется, что это как-то связанно с реализацией не стандартного контрола...



    All

    Меня вот что интересует: если такие бешенные (для Dial-Up соединений) скорости возможны, то почему обычно их нет?
     
  19. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    > А средняя скорость передачи данных у тебя возросла или нет (и вообще, какая она у тебя?)?



    С некоторыми сайтами, например китайскими :derisive:, возросла, с некоторыми осталась прежней, но в любом случае стабильность соединения увеличилась, т.к. провайдерский прокси по определению обязан иметь "толстый" канал.



    > Каким модемом пользуешься (у меня: USR Robotics Sportster Voice 33.6)?



    USR 56K Faxmodem(c Flash'ем)



    > Да, посмотри, пожалуйста, и если что найдешь, то сообщи. Мне кажется, что это как-то связанно с реализацией не стандартного контрола...



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

    Oleg_SK Guest

    Публикаций:
    0
    Asterix

    В аттаче программка. Попробуй запустить ее под масдаем. Если нестандартный контрол появится, то косяк где-то в моей утилитке...

    [​IMG] 1832721907__editbut.exe