idiMAN
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору SuPriTo Вот кусок кода на Delphi, я думаю разберётесь... Код: const dwBufferSize = 10000; var hDir : THandle; hDataReady : THandle; Overlapped : TOverlapped; HandleArray : array [0..1] of THandle; bChanged : Boolean; lpBuf : Pointer; cbReturn : Cardinal; WaitResult : Cardinal; begin hDir := CreateFile( PChar('\\server\c$\MDaemon\Users\'), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS or FILE_FLAG_OVERLAPPED, 0 ); hDataReady := CreateEvent(nil, False, False, nil); Overlapped.hEvent := hDataReady; HandleArray[0] := hDataReady; HandleArray[1] := hStopHandle; GetMem(lpBuf, dwBufferSize); ZeroMemory(lpBuf, dwBufferSize); repeat bChanged := ReadDirectoryChanges( hDir, lpBuf, dwBufferSize, True, FILE_NOTIFY_CHANGE_FILE_NAME or FILE_NOTIFY_CHANGE_LAST_WRITE, @cbReturn, @Overlapped, nil ); WaitResult := WaitForMultipleObjects(2, @HandleArray, False, INFINITE); if WaitResult = WAIT_OBJECT_0 then begin // Тут обрабатываем сведения о полученных изменениях файловой системы end; until WaitResult <> WAIT_OBJECT_0; if hDataReady <> INVALID_HANDLE_VALUE then CloseHandle( hDataReady ); FreeMem( lpBuf ); if hDir <> INVALID_HANDLE_VALUE then CloseHandle( hDir ); | P.S. Всё это крутится в отдельном потоке, который завершается из основного с помощью Код: В основном потоке ранее создан hStopHandle Код: hStopHandle := CreateEvent( nil, True, False, nil ); | | Всего записей: 466 | Зарегистр. 05-05-2003 | Отправлено: 12:34 09-08-2015 | Исправлено: idiMAN, 12:38 09-08-2015 |
|