На главную

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 | Скачать Вниз

ReadDirectoryChangesW



[New - Windows NT]

The ReadDirectoryChangesW function returns information describing the changes occurring within a directory.

BOOL ReadDirectoryChangesW(

HANDLE hDirectory, // handle to the directory to be watched
LPVOID lpBuffer, // pointer to the buffer to receive the read results
DWORD nBufferLength, // length of lpBuffer
BOOL bWatchSubtree, // flag for monitoring directory or directory tree
DWORD dwNotifyFilter, // filter conditions to watch for
LPDWORD lpBytesReturned, // number of bytes returned
LPOVERLAPPED lpOverlapped, // pointer to structure needed for overlapped I/O
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine // pointer to completion routine
);


Parameters

hDirectory

Identifies the directory to be watched. This directory must be opened with the FILE_LIST_DIRECTORY access right.

lpBuffer

Specifies the address of the formatted buffer in which the read results are to be returned. The structure of this buffer is defined by the FILE_NOTIFY_INFORMATION structure. This buffer is filled either synchronously or asynchronously, depending on how the directory is opened and what value is given to the lpOverlapped parameter. For more information, see the Remarks section.

nBufferLength

Specifies the length of the buffer pointed to by the lpBuffer parameter.

bWatchSubtree

Specifies whether the ReadDirectoryChangesW function will monitor the directory or the directory tree. If TRUE is specified, the function monitors the directory tree rooted at the specified directory. If FALSE is specified, the function monitors only the directory specified by the hDirectory parameter.

dwNotifyFilter

Specifies filter criteria the function checks to determine if the wait operation has completed. This parameter can be one or more of the following values:

Value Meaning
FILE_NOTIFY_CHANGE_FILE_NAME Any filename change in the watched directory or subtree causes a change notification wait operation to return. Changes include renaming, creating, or deleting a file.
FILE_NOTIFY_CHANGE_DIR_NAME Any directory-name change in the watched directory or subtree causes a change notification wait operation to return. Changes include creating or deleting a directory.
FILE_NOTIFY_CHANGE_ATTRIBUTES Any attribute change in the watched directory or subtree causes a change notification wait operation to return.
FILE_NOTIFY_CHANGE_SIZE Any file-size change in the watched directory or subtree causes a change notification wait operation to return. The operating system detects a change in file size only when the file is written to the disk. For operating systems that use extensive caching, detection occurs only when the cache is sufficiently flushed.
FILE_NOTIFY_CHANGE_LAST_WRITE Any change to the last write-time of files in the watched directory or subtree causes a change notification wait operation to return. The operating system detects a change to the last write-time only when the file is written to the disk. For operating systems that use extensive caching, detection occurs only when the cache is sufficiently flushed.
FILE_NOTIFY_CHANGE_LAST_ACCESS Any change to the last access time of files in the watched directory or subtree causes a change notification wait operation to return.
FILE_NOTIFY_CHANGE_CREATION Any change to the creation time of files in the watched directory or subtree causes a change notification wait operation to return.
FILE_NOTIFY_CHANGE_SECURITY Any security-descriptor change in the watched directory or subtree causes a change notification wait operation to return.


lpBytesReturned

For synchronous calls, this parameter specifies the number of bytes transferred into the lpBuffer parameter. For asynchronous calls, this parameter is undefined. You must use an asynchronous notification technique to retrieve the number of bytes transferred.

lpOverlapped

Points to an OVERLAPPED structure that supplies data to be used during asynchronous operation. Otherwise, this value is NULL. The Offset and OffsetHigh members of this structure are not used.

lpCompletionRoutine

Points to a completion routine to be called when the operation has been completed and the calling thread is in an alertable wait state. For more information about this completion routine, see FileIOCompletionRoutine.



Return Value

If the function succeeds, the return value is nonzero. For synchronous calls, this means that the operation succeeded. For asynchronous calls, this indicates that the operation was successfully queued.
If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

To obtain a handle to a directory, use the CreateFile function with FILE_FLAG_BACKUP_SEMANTICS as follows:

hDir = CreateFile (
DirName, // pointer to the file name
FILE_LIST_DIRECTORY, // access (read-write) mode
FILE_SHARE_READ|FILE_SHARE_DELETE, // share mode
NULL, // security descriptor
OPEN_EXISTING, // how to create
FILE_FLAG_BACKUP_SEMANTICS, // file attributes
NULL // file with attributes to copy

);


A call to ReadDirectoryChangesW can be completed synchronously or asynchronously. To specify asynchronous completion, open the directory with CreateFile as shown above, but additionally specify the FILE_FLAG_OVERLAPPED attribute in the dwFlagsAndAttributes parameter. Then specify an OVERLAPPED structure when you call ReadDirectoryChangesW.
Upon successful synchronous completion, the lpBuffer parameter is a formatted buffer and the number of bytes written to the buffer is available in lpBytesReturned. If the number of bytes transferred is zero, the buffer was too small to provide detailed information on all the changes that occurred in the directory or subtree. In this case, you should compute the changes by enumerating the directory or subtree.

For asynchronous completion, you can receive notification in one of three ways:

· Using the GetOverlappedResult function. To receive notification through GetOverlappedResult, do not specify a completion routine in the lpCompletionRoutine parameter. Be sure to set the hEvent member of the OVERLAPPED structure to a unique event.
· Using the GetQueuedCompletionStatus function. To receive notification through GetQueuedCompletionStatus, do not specify a completion routine in lpCompletionRoutine. Associate the directory handle hDirectory with a completion port by calling the CreateIoCompletionPort function.

· Using a completion routine. To receive notification through a completion routine, do not associate the directory with a completion port. Specify a completion routine in lpCompletionRoutine. This routine is called whenever the operation completes while the thread is in an alertable wait state. The hEvent member of the OVERLAPPED structure is not used by the system, so you can use it yourself.

See Also

CreateFile, CreateIoCompletionPort, FILE_NOTIFY_INFORMATION, FileIOCompletionRoutine, GetOverlappedResult, GetQueuedCompletionStatus, OVERLAPPED


Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

ReadDirectoryChangesW



[Новый - Windows NT]

Функция ReadDirectoryChangesW возвращает информацию, описывающую появление изменений в пределах директория.

BOOL ReadDirectoryChangesW(

РУЧКА hDirectory, // оперируется в директорий, который нужно наблюдать LPVOID lpBuffer, // указатель в буфер, чтобы получать результаты чтения DWORD nBufferLength, // длины lpBuffer BOOL bWatchSubtree, // флага для проверки директория или дерева директория DWORD dwNotifyFilter, // условий фильтра, чтобы ожидать LPDWORD lpBytesReturned, // количество байтов возвращало LPOVERLAPPED lpOverlapped, // указатель на структурный необходимый для перекрытого указателя В/В LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine // в программу завершения
);


Параметры

hDirectory

Идентифицирует директорий, который нужно наблюдаться. Этот директорий должен быть открыт правом доступа FILE_LIST_DIRECTORY.

lpBuffer

Определяет адрес форматированного буфера в котором результаты чтения должны быть возвращаны. Структура этого буфера определена структурой FILE_NOTIFY_INFORMATION. Этот буфер заполнен или синхронно или асинхронно, в зависимости от как директорий открыт и какая величина дана lpOverlapped параметру. Более подробно, смотри секцию Замечаний.

nBufferLength

Определяет длину буфера указанного, чтобы параметром lpBuffer.

bWatchSubtree

Определяет проверит функция ReadDirectoryChangesW директорий или дерево директория. Если ИСТИНА определена, функция проверяет дерево директория образованное в определенном директории. Если ЛОЖЬ определена, функция проверяет только директорий определялся параметром hDirectory.

dwNotifyFilter

Определяет критериям фильтра функциональные чеки, чтобы определяться если операция ожидания завершилась бы. Этот параметр может быть одно или более из следующего величин:

Значение Величины
FILE_NOTIFY_CHANGE_FILE_NAME Любое filename изменение в понаблюданном директории или поддерево заставляет операцию ожидания уведомления изменения, чтобы возвращаться. Изменения включают переименование, создание, или удаляя файл.
FILE_NOTIFY_CHANGE_DIR_NAME Любого директория-имя изменения в понаблюданном директории или поддерево заставляет операцию ожидания уведомления изменения, чтобы возвращаться. Изменения включают создание или удаляя директорий.
FILE_NOTIFY_CHANGE_ATTRIBUTES Любого вспомогательного изменения в понаблюданном директории или поддереве заставляет операцию ожидания уведомления изменения, чтобы возвращаться.
FILE_NOTIFY_CHANGE_SIZE Любого файлового размера изменения в понаблюданном директории или поддереве заставляет операцию ожидания уведомления изменения, чтобы возвращаться. Операционная система обнаруживает изменение в файловом размере только когда файл записан на диск. Для операционных систем, которые используют расширенное кэширование, обнаружение происходит только когда кеш достаточно сброшен.
FILE_NOTIFY_CHANGE_LAST_WRITE Любого изменения в последнюю запись-время файлов в понаблюданном директории или поддереве заставляет операцию ожидания уведомления изменения, чтобы возвращаться. Операционная система обнаруживает изменение в последнюю запись-время только когда файл записан на диск. Для операционных систем, которые используют расширенное кэширование, обнаружение происходит только когда кеш достаточно сброшен.
FILE_NOTIFY_CHANGE_LAST_ACCESS Любого изменения в последнее время доступа файлов в понаблюданном директории или поддереве заставляет операцию ожидания уведомления изменения, чтобы возвращаться.
FILE_NOTIFY_CHANGE_CREATION Любого изменения во время создания файлов в понаблюданном директории или поддереве заставляет операцию ожидания уведомления изменения, чтобы возвращаться.
FILE_NOTIFY_CHANGE_SECURITY Любой безопасности-дескриптор изменения в понаблюданном директории или поддереве заставляет операцию ожидания уведомления изменения, чтобы возвращаться.


lpBytesReturned

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

lpOverlapped

Точки на ПЕРЕКРЫТУЮ структуру, которые поставляют данные, которые нужно использоваться в течение асинхронной операции. В противном случае, эта величина НЕДЕЙСТВИТЕЛЬНА. Смещение и участники OffsetHigh этой структуры не использованы.

lpCompletionRoutine

Точки на программу завершения, которые нужно быть названы когда операция завершена и вызывающая резьба - в состоянии ожидания alertable. Более подробно об этой программе завершения, смотри FileIOCompletionRoutine.



Обратная Величина

Если функция добивается успеха, обратная величина ненулевая. Для синхронных вызовов, это означает, что операция получала. Для асинхронных вызовов, это указывает, что операция успешно была поставлена в очередь.
Если функция терпит неудачу, обратная величина нулевая. Для того, чтобы расширять информацию ошибки, назовите GetLastError.

Замечания

Для того, чтобы получать ручку в директорий, используйте функцию CreateFile с FILE_FLAG_BACKUP_SEMANTICS следующим образом:

hDir = CreateFile (
DirName, // УКАЗАТЕЛЬ в файловое имя FILE_LIST_DIRECTORY, // доступ режима (прочитанная-запись) FILE_SHARE_READ|FILE_SHARE_DELETE, // акционерный режим НЕДЕЙСТВИТЕЛЬНЫЙ, // дескриптор безопасности OPEN_EXISTING, // как, чтобы создавать FILE_FLAG_BACKUP_SEMANTICS, // атрибуты файла НЕДЕЙСТВИТЕЛЬНЫЙ // файл с атрибутами, чтобы копироваться

);


Вызов на ReadDirectoryChangesW может завершаться синхронно или асинхронно. Для того, чтобы определять асинхронное завершение, откройте директорий с CreateFile как показано выше, но к тому же определите атрибут FILE_FLAG_OVERLAPPED в параметре dwFlagsAndAttributes. Затем определите ПЕРЕКРЫТУЮ структуру когда Вы называете ReadDirectoryChangesW.
На успешном синхронном завершении, параметр lpBuffer - форматированный буфер и количество байтов записанные в буфер доступно в lpBytesReturned. Если количество переданных байтов является нулем, буфер был слишком небольшим, чтобы обеспечивать подробную информацию о всех изменениях, которая происходила в директории или поддереве. В этом случае, Вы должны вычислить изменения перечисляя директорий или поддерево.

Для асинхронного завершения, Вы можете получить уведомление одним из трех способов:

Используя функцию GetOverlappedResult. Для того, чтобы получать уведомление через GetOverlappedResult, не определяйте программу завершения в параметре lpCompletionRoutine. Не забудьте устанавливать элемент hEvent ПЕРЕКРЫТОЙ структуры в уникальное событие.
Используя функцию GetQueuedCompletionStatus. Для того, чтобы получать уведомление через GetQueuedCompletionStatus, не определяйте программу завершения в lpCompletionRoutine. Соедините ручку директория hDirectory с портом завершения вызывая функцию CreateIoCompletionPort.

Используя программу завершения. Для того, чтобы получать уведомление через программу завершения, не соединяйте директорий с портом завершения. Определите программу завершения в lpCompletionRoutine. Эта программа названа всякий раз, когда операция завершает тогда как резьба - в состоянии ожидания alertable. Элемент hEvent ПЕРЕКРЫТОЙ структуры не использован системой, так что Вы можете использовать это сами.

Смотри Также

CreateFile, CreateIoCompletionPort, FILE_NOTIFY_INFORMATION, FileIOCompletionRoutine, GetOverlappedResult, GetQueuedCompletionStatus, ПЕРЕКРЫТОЕ


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