FindFirstChangeNotification 使用宽字符串传参是报错Failed to monitor directory changes
时间: 2024-02-18 07:02:45 浏览: 123
在使用 `FindFirstChangeNotification` 函数时,如果使用宽字符串传递目录路径参数后出现 "Failed to monitor directory changes" 错误,这可能是因为传递的路径字符串末尾包含了一个反斜杠 "\"。
解决方法是在传递路径字符串之前,先检查路径字符串的末尾是否包含反斜杠 "\"。如果包含,则需要删除这个反斜杠,然后再传递路径字符串。
以下是一个简单的例子:
```c
#include <stdio.h>
#include <windows.h>
int wmain(void)
{
// 定义宽字符串类型的路径名
wchar_t path[] = L"D:\\MyFolder\\";
// 如果路径名最后一个字符是反斜杠,则删除它
size_t len = wcslen(path);
if (len > 0 && path[len-1] == L'\\') {
path[len-1] = L'\0';
}
// 创建监视器
HANDLE hMonitor = FindFirstChangeNotification(path, FALSE, FILE_NOTIFY_CHANGE_LAST_WRITE);
if (hMonitor == INVALID_HANDLE_VALUE)
{
wprintf(L"创建监视器失败,错误码:%d\n", GetLastError());
return 1;
}
// 等待监视器事件
wprintf(L"正在监视:%ls\n", path);
DWORD dwWait = WaitForSingleObject(hMonitor, INFINITE);
if (dwWait == WAIT_OBJECT_0)
{
wprintf(L"监视器事件已触发\n");
}
else
{
wprintf(L"等待监视器事件失败,错误码:%d\n", GetLastError());
}
// 关闭监视器
FindCloseChangeNotification(hMonitor);
return 0;
}
```
在这个例子中,我们在传递路径字符串之前,检查路径字符串的末尾是否包含反斜杠 "\"。如果包含,则将其删除。这样可以确保传递给 `FindFirstChangeNotification` 函数的路径字符串是一个有效的路径名。
阅读全文