Допустим, есть две одинаковые папки. Нужно следить за ними, и когда в одной изменится инфа,
нужно очень быстро, не переписывая весь файл, изменить изменившуюся часть информации в другой папке.
Т.е. файл 1: abcdefg -> меняется на wbcdefg
файл 2: мы перезаписываем только первый символ во втором файле.
и т.п.
Вобщем, такая синхронизация получается.
Надеюсь, понятно выразился
Есть соображения как это сделать?
Можно и немного отступить от сути, главное чтобы быстро было.
Буду очень благодарен помощи!
Здравствуйте, Shershen, Вы писали:
S>Есть соображения как это сделать?
S>Можно и немного отступить от сути, главное чтобы быстро было.
S>Буду очень благодарен помощи!
Наверное надо менять изменившуюся часть файла
Или вы думаете, что это как-то можно сделать на уровне системы?
Здравствуйте, Shershen, Вы писали:
S>Есть соображения как это сделать?
Вообще-то это binary patching. Поскольку операционка не умеет выполнять вставки, то нужно фактически выполнить побайтное сравнение двух файлов и перезаписать те места, которые изменились.
Это означает, что тот файл, который собственно изменился, тебе придется прочитать целиком — в пользовательском режиме винды нет способа узнать, в каком месте произошло изменение. Можно немножко ускорить события, если избежать полного перечитывания второго файла для сравнения. Это можно сделать, порезав его на фрагменты и вычислив для них контрольные суммы. Теперь изменившийся файл обсчитывается тем же способом, и если контрольная сумма какого-то фрагмента не совпала, то значит в нем есть изменения. А те фрагменты, в которых сумма совпала, можно безболезненно скипать.
S>Можно и немного отступить от сути, главное чтобы быстро было.
Если тебе просто очень хочется, чтобы заведомо одинаковый файл был одновременно в двух местах, используй линки на уровне файловой системы. Они поддерживаются начиная с NTFS 4, если не ошибаюсь. Их умеет делать например FAR. Это гарантированно самый быстрый способ.
А вот именно реплицировать файл еще быстрее, чем я описал в первом способе, можно перейдя в режим ядра. Можно написать драйвер-фильтр файловой системы, который будет все изменения в одном файле отображать в другой. При этом дописывание 1 символа в конец гигабайтного файла не приведет к нудному его сканированию.
... << RSDN@Home 1.1.3 beta 2 >>