最近在写一个小项目涉及到监控新建文件和文件夹的操作,经过一番调研和学习,我找到了一个比较好用和合适的方法。
PS:函数中的PrintError函数是我调试输出错误码的函数,可以忽略和注释掉。
HANDLE hRootHandle = CreateFile(
szRootPath, //监控路径
FILE_LIST_DIRECTORY,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
NULL);
if(hRootHandle == INVALID_HANDLE_VALUE)
{
AfxMessageBox (TEXT("监控线程创建失败!"));
return 0;
}
PrintErrorW (TEXT("监控线程成功 : ") + szRootPath);
wchar_t notify[1024];
ZeroMemory(notify, 1024);
DWORD dwBytes;
FILE_NOTIFY_INFORMATION *pNotify = (FILE_NOTIFY_INFORMATION *)notify;
while (TRUE)
{
//Sleep (10);
if (ReadDirectoryChangesW (hRootHandle, ¬ify, sizeof(notify), TRUE,
FILE_NOTIFY_CHANGE_CREATION |
FILE_NOTIFY_CHANGE_FILE_NAME |
FILE_NOTIFY_CHANGE_DIR_NAME |
FILE_NOTIFY_CHANGE_LAST_WRITE,