|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Monitoring Changes in a Directory or Directory Tree
The following example monitors the directory tree starting at C:\ for directory name changes. It also monitors the C:\WINDOWS directory for filename changes.
The example uses the FindFirstChangeNotification function to create two notification handles and the WaitForMultipleObjects function to wait on the handles. Whenever a directory is created or deleted in the tree starting at C:\ , the example updates the entire directory tree. Whenever a file is created or deleted in the C:\WINDOWS directory, the example refreshes the WINDOWS directory. The FindNextChangeNotification function restarts the change notification each time the example processes a change.
DWORD dwWaitStatus; HANDLE dwChangeHandles[2]; // Watch the C:\WINDOWS directory for file creation and // deletion. dwChangeHandles[0] = FindFirstChangeNotification( "C:\\WINDOWS", // directory to watch FALSE, // do not watch the subtree FILE_NOTIFY_CHANGE_FILE_NAME); // watch filename changes if (dwChangeHandles[0] == INVALID_HANDLE_VALUE) ExitProcess(GetLastError()); // Watch the C:\ subtree for directory creation and
// deletion. dwChangeHandles[1] = FindFirstChangeNotification( "C:\\", // directory to watch TRUE, // watch the subtree FILE_NOTIFY_CHANGE_DIR_NAME); // watch dir. name changes if (dwChangeHandles[1] == INVALID_HANDLE_VALUE) ExitProcess(GetLastError()); // Change notification is set. Now wait on both notification // handles and refresh accordingly. while (TRUE) { // Wait for notification.
dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles, FALSE, INFINITE); switch (dwWaitStatus) { case WAIT_OBJECT_0: // A file was created or deleted in C:\WINDOWS. // Refresh this directory and restart the // change notification. RefreshDirectory is an // application-defined function. RefreshDirectory("C:\\WINDOWS") if ( FindNextChangeNotification( dwChangeHandles[0]) == FALSE )
ExitProcess(GetLastError()); break; case WAIT_OBJECT_0 + 1: // A directory was created or deleted in C:\. // Refresh the directory tree and restart the // change notification. RefreshTree is an // application-defined function. RefreshTree("C:\\"); if (FindNextChangeNotification( dwChangeHandles[1]) == FALSE) ExitProcess(GetLastError());
break; default: ExitProcess(GetLastError()); } }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Проверка Изменяется в Дереве Директория или Директория
Следующий пример проверяет дерево директория, начинающееся в C:\ для изменений имени директория. Это также проверяет C:директорий \WINDOWS для filename изменений.
Пример использует функцию FindFirstChangeNotification, чтобы создавать две ручки уведомления и функция WaitForMultipleObjects, чтобы ожидаться в ручках. Всякий раз, когда директорий создан или удален в дереве, начинающемся в C:\ , пример корректирует целое дерево директория. Всякий раз, когда файл создан или удален в C:директорий \WINDOWS, пример освежает директорий ОКНА. Функция FindNextChangeNotification перезапускает уведомление изменения всякий раз, когда пример обрабатывает изменение.
DWORD dwWaitStatus; ПРООПЕРИРУЙТЕ dwChangeHandles[2]; // Понаблюдайте C:директорий \WINDOWS для файлового создания и // удаления. dwChangeHandles[0] = FindFirstChangeNotification( "C:\\WINDOWS", // ДИРЕКТОРИЙ, чтобы наблюдать ЛОЖЬ, // не наблюдать поддерево FILE_NOTIFY_CHANGE_FILE_NAME); // часы filename изменения если (dwChangeHandles[0] == INVALID_HANDLE_VALUE) ExitProcess(GetLastError()); // Часы C:\ поддерева для создания директория и
// удаление. dwChangeHandles[1] = FindFirstChangeNotification( "C:\\", // ДИРЕКТОРИЙ, чтобы наблюдать ИСТИНУ, // наблюдать поддерево FILE_NOTIFY_CHANGE_DIR_NAME); // изменения dir. имени часов если (dwChangeHandles[1] == INVALID_HANDLE_VALUE) ExitProcess(GetLastError()); // Уведомление Изменения установлено. Теперь ожидайтесь как в уведомлении // ручки так и освежаться соответственно. пока (ИСТИНА) { // Уведомление Ожидания.
dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles, ЛОЖЬ, БЕСКОНЕЧНАЯ); ключ (dwWaitStatus) { случай WAIT_OBJECT_0: // A Файл был создан или был удален в C:\WINDOWS. // Освежите этот директорий и перезапускайте // изменять уведомление. RefreshDirectory - // определенная прикладная функция. RefreshDirectory("C:\\WINDOWS") ЕСЛИ ( FindNextChangeNotification( dwChangeHandles[0]) == ЛОЖЬ )
ExitProcess(GetLastError()); прерывание; случай WAIT_OBJECT_0 + 1: // A Директорий был создан или был удален в C:\. // Освежите дерево директория и перезапускайте // изменять уведомление. RefreshTree - // определенная прикладная функция. RefreshTree("C:\\"); если (FindNextChangeNotification( dwChangeHandles[1]) == ЛОЖЬ) ExitProcess(GetLastError());
прерывание; невыполнение: ExitProcess(GetLastError()); } }
|
|
|
|
| |