На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

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());
}
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz