Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];

Вниз

необходимо отследить какие файлы были измненены или созданы   Найти похожие ветки 

 
Дмитрий Д.   (2002-01-30 07:20) [0]

Суть задачи такова: запускается мое приложение, которое должно в дальнейшем просто висеть в памяти и вести лог в файл, какие файлы были изменены или созданы во время работы пользователя.
Нужно для каждодневного архивирования работы пользователей.
сейчас приходится сканировать каталоги в начале дня и в конце дня на предмет изменений, это долго.
Может есть способ на лету вести лог, что было изменено или создано .
Заранее спасибо.


 
MBo   (2002-01-30 13:13) [1]

FindFirstChangeNotification и т.д.
готовый компонент есть в rxlib


 
Дмитрий Д.   (2002-01-30 15:27) [2]

спасибо за ответ.
но насколько я понял я получу лишь событие на изменение,
а вот как получить какой файл в данной папке был изменен ?


 
MBo   (2002-01-30 15:46) [3]

а это уже руками.


 
panov   (2002-01-30 18:20) [4]

Для Windows NT есть функция ReadDirectoryChangesW


 
Дмитрий Д.   (2002-01-31 13:47) [5]

спасибо.
возникла мысль, а может как то анализировать FAT на предмет изменений до и после работы ?


 
VuDZ   (2002-01-31 14:15) [6]

если нужен 100% рабочий код - sysinternals.com - FIleMon с исходиками - бушь знать свё с точностью до байта.


 
drpass   (2002-01-31 14:53) [7]

А тебе именно хочется свою программу написать?
Ведь все это может обеспечить и сама винда, тебе только нужно включить аудит для тех дисков или папок, которые требуется контролировать, и все операции, которые тебя интересуют, будут автоматически заноситься в журнал безопасности винды.


 
VuDZ   (2002-01-31 15:29) [8]

2drpass - особенно рульно потом многометровый логфайл просматривать :D


 
panov   (2002-01-31 18:02) [9]

Локальные диски мониторить несложно. А вот эту задачку решить бы для сетевых дисков...


 
MBo   (2002-01-31 18:09) [10]

>panov ©
у тебя так и не вышло пока для NT/Netware?


 
Mirovodin   (2002-01-31 20:45) [11]

Думал над этой задачкой в свое время, 2 решения:

1. сканировать все файлы и составлять что то пипа SnapShot т.е. снимков, в них хранить что надо ( название, размер, атрибуты ...)
Реализуемо просто, скорость работы ---> 0.
2. Перехват вызова API функции CreateFile, OpenFile, т.д. По параметрам можно судить о том, что приложение пытается сделать диском. Если процесс который нужно отследить дочерний то все ок, можно его да же запустить как Debug процесс. Но вот если следить нужно за многими процессами (всеми) то это очень сложно реализуемо. Во всяком случае у меня не получилось :)



 
AlexKniga   (2002-02-01 12:04) [12]

2Дмитрий Д.
Вы сканируете каталоги с помощью FindFirst/FindNext/FindClose?

У самого похожая проблема, пользуюсь FindFirst, но скорость ... :(
Но ведь, есть же быстрые поисковики, например, тот же Найти\файлы и папки. Как он, так шустро, находит измененные файлы?



 
Дмитрий Д.   (2002-02-01 13:00) [13]

to AlexKniga
да я сканирую рекурсией с помощью FindFirst/FindNext
почему такой способ не совсем подходит:
дело в том что количство файлов для проверки может превышать
180000, а количество каталогов 7000
и сканирование производится на предмет различия в размере и CRC
файлов. Поэтому все это занимает очень много времени, причем именно сбор информации, а не его обработка.
Что касается поисковиков, например в той же винде он используюет индексирование данных в фоновом режиме, и в дальнейшем поиск производится уже по индексу...

to Mirovodin
1. сканировать все файлы и составлять что то пипа SnapShot т.е. снимков, в них хранить что надо ( название, размер, атрибуты ...)
Реализуемо просто, скорость работы ---> 0.

расскажи пожалуста поподробне как можно быстро снимать снэпшоты с фаловой системы.

to panov
Локальные диски мониторить несложно. А вот эту задачку решить бы для сетевых дисков...
Если не очень сложно напиши маленький примерчик для локальных...



 
Mirovodin   (2002-02-02 00:12) [14]

2 Дмитрий Д.
Список файлов составляется с пом-ю, FindFileFist, FindFileNext - это стандарт WinAPI по другому я не знаю как можно получить список файлов. У каждого файла храним только то что нам нужно ( например имя, размер ) т.к. при огромном кол-ве файлов расход памяти на хранение этого списка не хилый...
Дале сохраняем на диск или оствляем в памяти этот список и через нек-е время делаем снова такую же проц-ру но помещаем информацию в др. список.

НО вот самая проблема - СРАВНИТЬ эти два списка, т.к. это очень, повторяю очень долго . Дольше чем процесс сканирования в 2-3 раза(проверено только для создания удаления новых файлов, а если сверять контрольную сумму то это вообще ...). Применял хешированные списки и т.д. В принципе кому интересно посмотрите прогу
Professional UnInstaller http://www.hcsoft.spb.ru


 
Mirovodin   (2002-02-02 00:17) [15]

Да в дагонку, на счет сетевых - это все так же реализуемо методом поиска фалов. Просто нужно установить полный доступ к диску. На счет скорости сканирования - очень низкая на 10 MBit + не кислый трафик :)


 
Дмитрий Д.   (2002-02-04 09:20) [16]

to Mirovodin
спасибо за ответ.
сразу скажу что время сбора информации у меня получается гораздо больше чем анализ (сравнение) этих двух списков, я просто придумал кривенький :) , но рабочий и достато быстрый алгоритм для сравнения списков, и основная затыка по времени со сбором инфы (я писал выше какие объемы приходится сканировать).
Можно канечно остановиться на анализе каталогов в которых произошли изменения, не учитывая сами измененные файлы (потому как не знаю как это сделать), но это все равно работа по схеме сравнения двух списков, причем формирование первого списка файлов все равно придется делать...

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


 
AlexKniga   (2002-02-04 12:23) [17]

2Дмитрий Д.
<<индексирование данных в фоновом режиме>>
Сомневаюсь. Так как, принес на работу домашний винт и выполнил поиск сразу после загрузки Винды. Нашел довольно шустро. При этом "Быстрый поиск ..." из Автозагрузки выкинут. Вообще я особого влияния от "Быстрый поиск ..." не ощущаю.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.04.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
6-9589
iXANiA
2002-01-22 15:02
2002.04.04
Именованный канал (named pipe)


14-9643
VID
2002-02-21 18:09
2002.04.04
Об InterBase 2


3-9392
zzz
2002-03-12 13:18
2002.04.04
TAction and Shortcuts


1-9532
Ирина
2002-03-22 15:35
2002.04.04
Метод WriteBinaryData


14-9621
Зачиняев Сергей
2002-02-22 15:28
2002.04.04
К вопросам о терминологии, русском языке и воспитании.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский