Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.28;
Скачать: CL | DM;

Вниз

Нужен алгоритм   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
1-90589
Alexandr
2002-02-12 13:27
2002.02.28
Фреймы


3-90466
vlv
2002-02-01 19:10
2002.02.28
Сообщение об ошибке СУБД


3-90450
навичек
2002-02-01 02:50
2002.02.28
Упаковка mdb шной базы с отношениями


14-90664
Bizon
2002-01-10 09:41
2002.02.28
О профессионалах и не очень


1-90577
Павел2
2002-02-12 10:24
2002.02.28
загрузка DLL с файл сервера