ReadDirectoryChangesW всегда возвращает 0

264
06 мая 2017, 22:49

Нужно отследить изменения в каталоге и его подкаталогах. Для этого использую функцию ReadDirectoryChangesW, но она постоянно возвращает 0. В чем может быть дело?

FILE_NOTIFY_INFORMATION strFileNotifyInfo[1024];
DWORD dwBytesReturned = 0; 
while(true){
    if(ReadDirectoryChangesW(L"D://ServerCatalog1" /*options.catalog*/, strFileNotifyInfo, sizeof(strFileNotifyInfo), true, FILE_NOTIFY_CHANGE_FILE_NAME || FILE_NOTIFY_CHANGE_DIR_NAME || FILE_NOTIFY_CHANGE_SIZE, &dwBytesReturned, NULL, NULL) != 0){
        printf("Mod: %s\n", strFileNotifyInfo[0].FileName);
    }
}
Answer 1

Проблема решена. Был невнимателен. В ReadDirectoryChangesW первым параметром нужно передавать HANDLE

HANDLE hDir = CreateFile("D://ServerCatalog1", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
while(true){
    if(ReadDirectoryChangesW(hDir, strFileNotifyInfo, sizeof(strFileNotifyInfo), true, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_SIZE, &dwBytesReturned, NULL, NULL) != 0){
        printf("Mod: %s\n", strFileNotifyInfo[0].FileName);
    } else {
        Error = GetLastError();
    }
}
READ ALSO
Ошибка сегментирования (Linux)

Ошибка сегментирования (Linux)

В данном коде получаю Ошибка сегментирования (сделан дамп памяти)Компилирую под Linux

440
LoadLibrary возвращает нули

LoadLibrary возвращает нули

Пытаюсь явно подключить dll библиотеки в свой c++ проект, вычитал, что делается это по такому принципу:

198
Компиляция Protocol Buffers в VS 2017

Компиляция Protocol Buffers в VS 2017

ЗдравствуйтеНе получается использовать Protocol Buffers в VS 2017 (Debug x86)

401
разбор json c++ eclips

разбор json c++ eclips

Добрый день, помогите разобраться, выдает ошибку - error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second: [-Werror] String...

234