сравнение файлов

Тема в разделе "WASM.A&O", создана пользователем XshStasX, 7 ноя 2011.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Есть два файла А,В.
    Файл В это копия файла А но в него добавленного немного данных ( 5-10%) в случайные места.

    Нужно имея файл А и доп. файлик в котором будет описанная разница файлов создать файл В.
    Позже просто не будет файла В, а сделать его копию раньше нельзя.

    пример
    А: abcdef
    В: abc32def

    Файл в котором будет описанная разница должен быть минимального размера.
    Лобовое решение просто побайтно сравнить файлы и отличные байты сохранить, но тогда файл В почти такого же размера как и файл А.

    Кто что подскажет?
     
  2. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Если достоверно известно, что в файл B данные только добавлены новые байты, и точно не изменены и не удалены какие-либо байты файла A, то задача тоже решается почти в лоб - бежать параллельно двумя указателями, но в файле A передвигать указатель только тогда, когда байты по указателям равны. Там, где не равны - считать разницей и записывать добавочные байты с указанием позиции указателя файла А. Если есть только добавления, то указатель в файле A гарантированно дойдет до конца не позже указателя в файле B.
     
  3. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    для указания позиций и длинн добавляемых участков можно применить представление с переменной длиной, определяемой количеством подряд идущих единиц в старших битах представления.
     
  4. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Данные могут не только вставляться, а и изменяться/удаляться .
     
  5. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Binary diff/patch utility version 4.3
    h**p://www.daemonology.net/bsdiff/bsdiff-4.3.tar.gz