Как сжать файлы, используя только отслеженные изменения? - PullRequest
2 голосов
/ 10 марта 2011

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

Ответы [ 3 ]

2 голосов
/ 10 марта 2011

Ключевое слово - «алгоритм сравнения». В c # есть несколько реализаций.

Diff.NET и Универсальный алгоритм многократного использования различий в C # выглядит как разумный выбор. Google найдет вам еще пару сотен вариантов.

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

Если вы также хотите сжать diff, вы можете использовать класс System.IO.Compression.GZipStream.

1 голос
/ 10 марта 2011

Этот пост может вам помочь.

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

0 голосов
/ 10 марта 2011

в каком формате у вас есть изменения?byte [], строка или поток?

смотрите здесь: Сжатие и распаковка строк в C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...