Форум: "Потрепаться";
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];
ВнизНужен алгоритм Найти похожие ветки
← →
panov (2002-01-14 07:17) [0]Предложите алгоритм.
Задача:
Есть сетевой диск. Необходимо на нем сканировать каталог для определения изменений файлов в нем.
Изменения могут быть такие:
1. Добавление файла.
2. Удаление файла.
3. Переименование файла.
4. Изменение атрибутов файла.
Прошу высказать мысли по этому поводу.
← →
MBo (2002-01-14 07:49) [1]RxFolderMonitor все это умеет
← →
panov (2002-01-14 08:01) [2]Не надо RxFolderMonitor. Нужен алгоритм.
← →
MBo (2002-01-14 08:14) [3]так в его исходниках все есть - создается
NotifyThread, отслеживающая FindFirstChangeNotification
WaitForMultipleObjects
и иже с ними
← →
panov (2002-01-14 08:27) [4]>MBo © (14.01.02 08:14)
FindFirstChangeNotification не работает для сетевых дисков.
← →
MBo (2002-01-14 08:39) [5]проверял - RXFold. работает для MS-сети и NetWare (Win98)
да и в SDK не увидел упоминания о сетевых дисках
← →
panov (2002-01-14 09:30) [6]Я тоже только что специально установил RX 2.75.
При попытке перевести объект RXFolderMonitor в сотояние Active
Выдается ошибка:
Win32 Error. Code: 50.
Запрос сети не поддерживается.
Так что, извиняйте. Информация, мягко говоря - не верна.
← →
MBo (2002-01-14 09:42) [7]А Windows какие?
У меня же все работает.
← →
panov (2002-01-14 09:51) [8]NT, сетевой диск на Novell.
← →
panov (2002-01-14 09:55) [9]Если хочешь, могу прислать свой пример с FindFirstChangeNotify/FindNextChangeNotify.
Он с сетевыми дисками не работает. Но с локальными прекрасно.
Попробуй у себя.
Но смысл вопроса в том, чтобы получить алгоритм:
Получаем список файлов и их атрибутов с некоторым интервалом времени.
Нужен алгоритм определения изменений с использованием списков этих файлов...
← →
Алексей Петров (2002-01-14 10:06) [10]> panov © (14.01.02 09:51)
> NT, сетевой диск на Novell.
То-то и оно, что Novell. На диске виндового сервера - эти функции работают
← →
Polevi (2002-01-14 10:09) [11]Создаешь в проверяемой папке скрытый файл, в котором хранишь информацию об остальных файлах в папке. Далее сканируешь папку и сравниваешь ее состояние с данными в твоем файле и обновляешь свой файл.
← →
panov (2002-01-14 10:27) [12]>Polevi © (14.01.02 10:09)
"сравниваешь ее состояние "
- переименовани файл - как это определить?
Задачка не такая простая, как кажется...
← →
andy_ar (2002-01-14 10:32) [13]Ну, думаю, что придется вести базу по файлам...
Если на сервере - NT, то все решается аудитом...
← →
panov (2002-01-14 10:32) [14]>Алексей Петров © (14.01.02 10:06)
Если сетевой диск на Win9x, то тоже не работает...
На сервере NT проверить нет возможности...
← →
panov (2002-01-14 10:33) [15]>andy_ar © (14.01.02 10:32)
Нужен не аудит.
Сканируется диск, и при изменении содежимого каталога программа реагирует на это.
← →
andy_ar (2002-01-14 10:38) [16]А разве нельзя сканировать не содержимое каталога, а файл аудита?
← →
Алексей Петров (2002-01-14 10:39) [17]Я проверял только на сетевом диске с NTFS. Там ReadDirectoryChangesW работал. Моя машина - тоже NT-шка.
← →
Andrey (2002-01-14 10:42) [18]> panov
"переименовани файл - как это определить" - может быть какая-нибудь контрольная сумма? Хотя тогда (наверно) нужно весь файл тянуть к себе и если файл слегка изменился то тогда можно говорить только о схожести файлов.
← →
panov (2002-01-14 10:46) [19]>andy_ar © (14.01.02 10:38)
А как быть с Novell, да и Win9x?
А есть еще Samba на unix...
---------------------
Как мне кажется, единственные работающие команды в любой операционной системе - FindFirst/FindNext.
Вот для них-то и нужно построить алгоритм.
Возможные грабли:
1. Добавление файла.
Возможно файл был удален, но на его место был записан новый с таким же именем.
2. Переименование.
При переименовании, возможно будет детектироваться удалене+добавление файла.
← →
panov (2002-01-14 10:47) [20]>Andrey © (14.01.02 10:42)
При переименовании я вижу только один выход - проверять все атрибуты(в том числе и размер). Но это не дает 100% гарантии.
← →
Romkin (2002-01-14 11:05) [21]И ничто не даст, это просто нельзя распознать, не влезая в дебри файловой структуры и не используя notification. Почему бы не остановиться именно на FindFirstChangeNotification? Если сервер NT - работает отовсюду, проверить очень легко - открываешь каталог в эксплорере, а потом с другой станции (или даже с этой) работаешь с ним. Если прежде открытое окно отреагировало - FindFirstChangeNotification работает.
Дело в том, что можно определить элементарные операции с файлами - создание файла/удаление файла. Тогда копирование определяется как создание такого же файла (с другим именем), переименование - копирование + удаление. Именно поэтому определить, что именно произошло, просто так нельзя. Можно, конечно, пытаться по таймеру открывать файл на исключительное использование, тогда если что-то делается с файлом, то будет ошибка, но опять же никакой гарантии.
← →
panov (2002-01-14 11:15) [22]С большой уверенностью можно сказать, что такой атрибут файла, как TimeStamp у разных файлов различный, поэтому если проверять время изменения+размер файла+имя+атрибуты, то почти на 100% можно определить, что произошло.
Проблемная ситуация возникает с большим количеством файлов.
В этом случае сканирование такого каталога будет достаточно ресурсоемким.
← →
MBo (2002-01-14 13:55) [23]проверил RXFold. на Win2K - не работает, так что дело в NT
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c