windwos C语言实时监控某个目录下是否有文件的创建并输出新建文件的名字
时间: 2024-01-21 12:04:39 浏览: 51
Windows的文件目录操作即时监视程序
5星 · 资源好评率100%
要输出新建文件的名字,你可以在监控到目录变化事件后,调用FindNextChangeNotification()函数获取目录变化信息,然后从信息中获取新创建的文件名。下面是一个示例代码:
```
#include <stdio.h>
#include <windows.h>
void monitorDirectoryChanges(const char* path) {
HANDLE dirHandle = FindFirstChangeNotification(path, FALSE, FILE_NOTIFY_CHANGE_FILE_NAME);
if (dirHandle == INVALID_HANDLE_VALUE) {
printf("Failed to monitor directory changes\n");
return;
}
while (TRUE) {
DWORD waitStatus = WaitForSingleObject(dirHandle, INFINITE);
if (waitStatus == WAIT_OBJECT_0) {
char buffer[1024];
DWORD bufferSize = sizeof(buffer);
DWORD bytesReturned = 0;
BOOL success = ReadDirectoryChangesW(
dirHandle,
buffer,
bufferSize,
FALSE,
FILE_NOTIFY_CHANGE_FILE_NAME,
&bytesReturned,
NULL,
NULL
);
if (success) {
FILE_NOTIFY_INFORMATION* fileInfo = (FILE_NOTIFY_INFORMATION*) buffer;
while (fileInfo) {
printf("A new file has been created in %s: %.*ls\n", path, fileInfo->FileNameLength / 2, fileInfo->FileName);
fileInfo = fileInfo->NextEntryOffset > 0 ? (FILE_NOTIFY_INFORMATION*) ((BYTE*) fileInfo + fileInfo->NextEntryOffset) : NULL;
}
} else {
printf("Failed to read directory changes\n");
break;
}
FindNextChangeNotification(dirHandle);
} else {
printf("Failed to wait for directory change notification\n");
break;
}
}
FindCloseChangeNotification(dirHandle);
}
int main() {
char path[] = "C:\\Some\\Directory";
monitorDirectoryChanges(path);
return 0;
}
```
在上面的代码中,我们调用了ReadDirectoryChangesW()函数来读取目录变化信息。该函数会返回一个指向FILE_NOTIFY_INFORMATION结构体数组的指针,每个结构体对应一个目录变化事件,其中包含了新创建文件的文件名信息。我们可以通过遍历这个数组来获取所有目录变化事件的信息,从而输出新创建文件的名字。注意,这里使用了Unicode版本的ReadDirectoryChanges()函数,因为它可以正确处理中文字符。如果要处理英文字符,可以使用ReadDirectoryChangesA()函数。
阅读全文