Як більшість програм синхронізації контролюють зміни файлів?


9

Чи синхронізують такі програми, як Dropbox, як правило, відстежують зміни файлів, роблячи байт шляхом порівняння байтів, або використовуючи хеші, або використовуючи diff/ зберігаючи локальні журнали фіксації, як контроль версій, чи що?

Відповіді:


8

У Windows існує механізм, щоб ОС попереджала вас про зміну структури директорій "спостерігав" - FindFirstChangeNotification (). Коли це вказує, що файл змінився, програма може потім порівнювати файли в зміненому каталозі, щоб знайти фактичні файли, які змінилися, переглянувши розмір, змінену дату, хеш тощо.

Це (як Михайло вказує нижче) - це те, що кожна платформа могла б якось надати. Я не казав, що подібні речі були унікальними для Windows.


1
І в Linux є ініціативою .
Майкл

Але що робити, якщо програма синхронізації не працювала під час зміни файлу? Не пропустили б можливість отримувати повідомлення про гачок?
mcandre

Ви використовували конкретний приклад dropbox, який, як правило, працює у фоновому режимі. Очевидно, якщо програма не працює, про неї не буде повідомлено. Тоді доведеться використовувати інші методи (можливо, модифіковану дату). Я не думаю, що ви збираєтеся отримати конкретну відповідь про те, які конкретні методи використовуються, адже різні програми роблять все по-різному. Краще поцікавтесь у творців конкретних програм, про які йдеться.
GrandmasterB

@mcandre Насправді те, що сказав GrandmasterB - якщо ви пропустили повідомлення, вам доведеться сканувати папку. Залежно від того, наскільки "точним" ви хочете бути, це може означати просто пошук нових файлів та змінених часових позначок / розмірів файлів (це порівняно недорого зробити), або, в гіршому випадку, порівняння всього файлу. Такі програми, як rsync, типово хешують файл фрагментами, тому зміни на початку даних можна виявити раніше, але в гіршому випадку (файли однакові), ви збираєтеся прочитати все це в.
Daniel B

2

У кінцевому рахунку для порівняння файлів вам потрібно порівняти кожен байт - як інакше ви помітили б одну зміну байта?

Насправді ви читаєте блоки байтів і обчислюєте хеш-значення, а потім перевіряєте список хешей. Хороший приклад - " rsync "

Наскільки я знаю, Dropbox виводить лише цілі файли, тож обчислить хеш всього файлу, щоб перевірити той самий файл


1
pst у деяких файлових системах є дата, змінена
ratchet freak

1
Хіба хешування не створить невеликий, але реальний ризик зіткнень, внаслідок чого файл не синхронізується? Dropbox, мабуть, використовує подібну реалізацію. dropbox.com/help/8/uk
mcandre

1
@mcandre, це здається, що це краще, ніж власне питання.
GrandmasterB

@ratchetfreak: дата, змінена в деяких системах, не обов'язково є надійною для подібних проблем. Простий дотик може призвести до того, що змінена дата може бути різною, коли синхронізація насправді не потрібна.
Стівен Еверс

1
@SnOrfus потім двічі перевірити зміни , коли дата зміни отримує змінений
тріскачки урод

1

Наприклад, .NET має клас FileSystemWatcher. Я впевнений, що інші мови та режими низького рівня можуть надавати подібні можливості.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.