Udokanec писал(а):
А как мне тогда искать измененные файлы?Простой способ - искать только измененные данные. Читаешь 1 байт из первого файла и 1 байт из второго, сравниваешь. Если не равны - сообщаешь позицию этого байта. Не подходит если требуется определить вставку или удаление данных.
Сложный способ - определение вставок/удалений. Я не владею конкретным алгоритмом для этого и на словах это описывать сложно.
Примем что файл 1 - это НОВЫЙ (ИЗМЕНЕННЫЙ) ФАЙЛ, файл 2 - ЭТАЛОННЫЙ ФАЙЛ
1) Находишь первый отличающийся байт в обеих файлах
Новый: ABCxyzDEFGHIMNOPQRSTU
Эталон: ABCDEFGHIJKLMNOPQRSTU
2) Проверяем вставка ли это в 1-м файле. Для этого читаем следующий байт в 1-м файле и сравниваем с найденным в п.1 байтом 2-го файла (отличающимся). Если не равны - берем третий байт из 1-го файла и опять сравниваем. Делаем так, пока байты не совпадутЭталон: ABCDEFGHIJKLMNOPQRSTU
Новый: ABCxyzDEFGHIMNOPQRSTU
Эталон: ABCDEFGHIJKLMNOPQRSTU
Если нашли совпадающий байт дальше - между позицией первого отличающегося байта и позицией совпадающего байта в 1-м файле был вставлен фрагмент.Эталон: ABCDEFGHIJKLMNOPQRSTU
2) Проверяем удаление фрагмента в 1-м файле. Для этого тот же отличный байт в 1-м файле и ищем во 2-м начиная с позиции различного байта (в п.1).
Если нашли дальше чем текущая позиция - между позицией первого отличающегося байта и позицией следующего совпадающего байта 2-го файла в 1-м файле был удален фрагмент. (Алгоритм тот же что и при вставке, только ищем "вставку" во 2-м файле).
Новый: ABCGHIMNOPQRSTU
Эталон: ABCDEFGHIJKLMNOPQRSTU
Новый: ABCGHIMNOPQRSTU
Эталон: ABCDEFGHIJKLMNOPQRSTU
3) Если по результатам п.2-3 не было вставки-удаления - значит это просто 1 измененный байт в данной позицииЭталон: ABCDEFGHIJKLMNOPQRSTU
Новый: ABCGHIMNOPQRSTU
Эталон: ABCDEFGHIJKLMNOPQRSTU
4) В зависимости от предыдущих результатов подправляется позиция для следующего сравнения и повторяем из п.1.
Вероятно это будет давать неопределенные результаты при наличии цепочек повторяющихся байт и изменениях в них.
Udokanec писал(а):
счетчик встал на позицию 10 в оригинальном файле сравнил количество байт с переведеннымUdokanec писал(а):
А у них разный размер-значит это перевод.