В .NET мне нужен способ сравнения двух файлов. Я думал о классе, который представляет собой разницу:Получите разницу в двух файлах
public enum DiffEntryState
{
New,
Removed,
Changed
}
public class DiffEntry
{
public byte[] Bytes;
public long FileOffset;
public DiffEntryState State = BackupByteEntryState.Changed;
}
Имена должны быть довольно понятными. Я думал о добавлении состояния к каждой записи, чтобы я мог различать случаи, когда первый файл был больше второго или наоборот.
Мне интересно, если есть общий и быстрый способ получить байтовые байтовые различия двух файлов. Я бы просто создал поток для каждого файла и сравнивал куски этих потоков, пока не закончится. Есть ли лучший способ, или у Framework есть встроенное решение? Имейте в виду, что мне нужны сами различия, а не только отзывы, что есть различия.
// Edit:
После сна ночью над проблемой, я предполагаю, что я везу неправильный подход здесь. Весь инструмент - это резервное решение, которое сможет сохранять только измененные байты и тем самым уменьшать общее необходимое пространство для резервного копирования. Вместо сохранения сжатого файла размером 14 МБ каждый раз будет сохранено только 200 тыс. Или менее.
Но, подумав о проблеме, я понял, что этого будет недостаточно, чтобы сохранить только разницу побайтно. Возьмите текст, например:
«Это строка». «Это была строка».
На самом деле, единственное изменение здесь - это «есть» для «было». Но мой подход предполагает, что измененный контент теперь «был строкой». Если это происходит в начале огромного файла, ну, этот подход бесполезен. Очевидно, мне нужен способ индексирования файла и обнаружения всех перемещенных, скопированных или измененных блоков по сравнению с исходным файлом. Phew ...
Какие файлы вам нужно сравнить? Текст? Изображений? ... –
Файлы могут быть любого типа, поэтому я взял байтовый подход ... –
В этом случае вы можете определить, что означает 'New',' Removed' и 'Changed', например, в файлах изображений? Или в файле '.doc'? Эти понятия вряд ли имеют смысл в общем случае. –