C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Отслеживание изменений в директории / Файлы, папки, диски / Файловая система

Отслеживание изменений в директории.

Следующий пример отслеживает изменения названия директорий, начиная с C:\. Так же пример отслеживает изменения имён файлов в директории C:\WINDOWS.

В примере используются две функции FindFirstChangeNotification и WaitForMultipleObjects - первая для создания двух нотификационных дескрипторов, а вторая для ожидания событий на этих дескрипторах. Так же в примере используется функция FindNextChangeNotification, которая перезапускает процес уведомлений.

DWORD dwWaitStatus;
HANDLE dwChangeHandles[2];

// дескриптор для отслеживания директории C:\WINDOWS на создание
// и удаление файлов.

dwChangeHandles[0] = FindFirstChangeNotification(
    "C:\\WINDOWS",                 // директория для просмотра
    FALSE,                         // не просматривать поддиректории
    FILE_NOTIFY_CHANGE_FILE_NAME); // отслеживать изм. имён файлов

if (dwChangeHandles[0] == INVALID_HANDLE_VALUE)
    ExitProcess(GetLastError());

// дескриптор для отслеживания C:\ на создание и удаление
// директорий.

dwChangeHandles[1] = FindFirstChangeNotification(
    "C:\\",                        // директория для просмотра
    TRUE,                          // просматривать поддиректории
    FILE_NOTIFY_CHANGE_DIR_NAME);  // отслеживать изм. имён директорий

if (dwChangeHandles[1] == INVALID_HANDLE_VALUE)
    ExitProcess(GetLastError());

// Итак, уведомления об изменениях установлены. Теперь ожидаем
// уведомления от дескрипторов и производим необходимое обновление.

while (TRUE)
{

    // Ждём уведомления.

    dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles,
        FALSE, INFINITE);

    switch (dwWaitStatus)
    {
        case WAIT_OBJECT_0:

        // В C:/WINDOWS был создан или удалён файл.
        // Обновляем эту директорию и перезапускаем уведомление.

            RefreshDirectory("C:\\WINDOWS")
            if ( FindNextChangeNotification(
                    dwChangeHandles[0]) == FALSE )
                ExitProcess(GetLastError());
            break;

        case WAIT_OBJECT_0 + 1:

        // В C:\ была создана или удалена директория.
        // Обновляем дерево директории и перезапускаем уведомление.

            RefreshTree("C:\\");
            if (FindNextChangeNotification(
                    dwChangeHandles[1]) == FALSE)
                ExitProcess(GetLastError());
            break;

        default:
            ExitProcess(GetLastError());
    }
}