Вверх ↑
Ответов: 4581
Рейтинг: 730
#1: 2021-10-18 13:25:31 ЛС | профиль | цитата
Udokanec писал(а):
А как мне тогда искать измененные файлы?
Искать отличия побайтово. Потому что если сравнивать два фрагмента разной длины то определенно они НЕ РАВНЫ.
Простой способ - искать только измененные данные. Читаешь 1 байт из первого файла и 1 байт из второго, сравниваешь. Если не равны - сообщаешь позицию этого байта. Не подходит если требуется определить вставку или удаление данных.

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

Новый: ABCGHIMNOPQRSTU
Эталон: ABCDEFGHIJKLMNOPQRSTU
3) Если по результатам п.2-3 не было вставки-удаления - значит это просто 1 измененный байт в данной позиции
4) В зависимости от предыдущих результатов подправляется позиция для следующего сравнения и повторяем из п.1.
Вероятно это будет давать неопределенные результаты при наличии цепочек повторяющихся байт и изменениях в них.

Udokanec писал(а):
счетчик встал на позицию 10 в оригинальном файле сравнил количество байт с переведенным
Не совсем понятно. С указанных позиций обеих файлов можно только прочитать УКАЗАННОЕ количество байт и сравнить их. Если прочитать разное количество - то сравнение всегда будет ложно (если сравнивать как строки).
Udokanec писал(а):
А у них разный размер-значит это перевод.
Количество считываемых байт каждый раз задаёшь ты - как узнать что у них "разный размер", что в твоем случае "размер"? Размер, например, может быть у файла - для того чтобы узнать его из него не надо ничего читать, есть соответственная точка.
карма: 26

0
Редактировалось 20 раз(а), последний 2021-10-18 15:59:22