ReadDirectoryChangesW асинхронно не срабатывает
От: InfoPilot  
Дата: 23.10.14 00:12
Оценка:
вызываю так
DWORD dwBytesRead = 0;
    DWORD dwWaitState = 0;
    DWORD                    status = ERROR_SUCCESS;
    DWORD                    cbNotifyBuffer;
//    PFILE_NOTIFY_INFORMATION pNotifyInformation;
//    wchar_t                  filename[MAX_PATH + 1];
    OVERLAPPED               overlapped;

    HANDLE                   hFile = INVALID_HANDLE_VALUE;
    PFILE_NOTIFY_INFORMATION pNotifyBuffer = NULL;

    sp->addText(_T("\n"));
    sp->addText(_T("я запустился!-"));
    sp->addText(sp->dirs[i]);

    ZeroMemory(&overlapped, sizeof(overlapped));

    cbNotifyBuffer = 4096;
    pNotifyBuffer = (PFILE_NOTIFY_INFORMATION) new BYTE[cbNotifyBuffer];
    if (!pNotifyBuffer)
    {
        status = ERROR_NOT_ENOUGH_MEMORY;
    }

    if (status == ERROR_SUCCESS) {
        hFile = CreateFileW(sp->dirs[i], FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
            FILE_ATTRIBUTE_DIRECTORY | FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, NULL);
        if (INVALID_HANDLE_VALUE == hFile)
        {
            status = GetLastError();
        }
    }
    if (status == ERROR_SUCCESS) {
        overlapped.hEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
        HANDLE hEventsToWait[2] = {sp->ev, overlapped.hEvent };
        BOOL cik=TRUE;

        while (cik) {

            ReadDirectoryChangesW(hFile, pNotifyBuffer, cbNotifyBuffer, FALSE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME |
                FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_SIZE |
                FILE_NOTIFY_CHANGE_LAST_WRITE,
                NULL, &overlapped, _CompletionRoutine);            

            dwWaitState = WaitForMultipleObjects(2, hEventsToWait, FALSE, INFINITE);

но при изменении в директории не срабатывает?
вчем может быть причина?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.