const int buf_size = 1024; TCHAR buf[buf_size]; DWORD dwBufWrittenSize; HANDLE hDir; hDir = CreateFile(lpDir, FILE_LIST_DIRECTORY, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (hDir == INVALID_HANDLE_VALUE) { DWORD dwErrorCode; dwErrorCode = GetLastError(); CloseHandle(hDir); exit(0); } while(true) { if(ReadDirectoryChangesW(hDir, &buf, buf_size, FALSE, FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_ATTRIBUTES \ , &dwBufWrittenSize, NULL, NULL)) { FILE_NOTIFY_INFORMATION * pfiNotifyInfo = (FILE_NOTIFY_INFORMATION*)buf; DWORD dwNextEntryOffset; do { dwNextEntryOffset = pfiNotifyInfo->NextEntryOffset; DWORD dwAction = pfiNotifyInfo->Action; DWORD dwFileNameLength = pfiNotifyInfo->FileNameLength; if(_tcsnccmp(pfiNotifyInfo->FileName, lpFileName, _tcsclen(lpFileName)) == 0) { Process(); //printf("%d\n", pfiNotifyInfo->Action); } if(dwNextEntryOffset != 0) { pfiNotifyInfo= (FILE_NOTIFY_INFORMATION*)((BYTE*)pfiNotifyInfo + dwNextEntryOffset); } }while (dwNextEntryOffset != 0); } else { printf("Moniter Failed!\n"); } } CloseHandle(hDir);