Windows C++ 文件修改监控方法
在 Windows 下,可以使用以下方法来监控一个文件是否被修改:
-
使用 ReadDirectoryChangesW 函数:
- 使用 CreateFile 函数打开要监控的文件或目录,并获得一个文件句柄。
- 使用 ReadDirectoryChangesW 函数监视文件句柄,设置回调函数来处理文件变化事件。
- 在回调函数中处理文件被修改的情况。
#include <Windows.h> VOID CALLBACK FileChangeCallback(DWORD dwErrorCode, DWORD dwBytesTransfered, LPOVERLAPPED lpOverlapped) { // 处理文件被修改的情况 // ... } int main() { HANDLE hDir = CreateFileW(L'path_to_file', FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, NULL); if (hDir == INVALID_HANDLE_VALUE) { // 处理文件打开失败的情况 return 1; } BYTE buffer[4096]; OVERLAPPED overlapped; ZeroMemory(&overlapped, sizeof(overlapped)); overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (ReadDirectoryChangesW(hDir, buffer, sizeof(buffer), TRUE, FILE_NOTIFY_CHANGE_LAST_WRITE, NULL, &overlapped, FileChangeCallback)) { // 监控成功,等待回调函数被触发 WaitForSingleObject(overlapped.hEvent, INFINITE); } else { // 处理监控失败的情况 } CloseHandle(overlapped.hEvent); CloseHandle(hDir); return 0; } -
使用 FindFirstChangeNotification 函数:
- 使用 CreateFile 函数打开要监控的文件或目录,并获得一个文件句柄。
- 使用 FindFirstChangeNotification 函数监视文件句柄,设置要监视的事件类型。
- 使用 WaitForSingleObject 函数等待文件变化事件的发生。
- 在文件变化事件发生后,使用 FindNextChangeNotification 函数继续监视文件变化事件。
#include <Windows.h> int main() { HANDLE hDir = CreateFileW(L'path_to_file', FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (hDir == INVALID_HANDLE_VALUE) { // 处理文件打开失败的情况 return 1; } HANDLE hChange = FindFirstChangeNotificationW(L'path_to_file', TRUE, FILE_NOTIFY_CHANGE_LAST_WRITE); if (hChange == INVALID_HANDLE_VALUE) { // 处理监控失败的情况 } // 等待文件变化事件的发生 WaitForSingleObject(hChange, INFINITE); // 处理文件被修改的情况 // ... FindNextChangeNotification(hChange); CloseHandle(hChange); CloseHandle(hDir); return 0; }
这些方法可以监控文件的最后写入时间(FILE_NOTIFY_CHANGE_LAST_WRITE),当文件被修改时,会触发回调函数或发出通知。你可以根据具体的需求选择适合的方法。
原文地址: https://www.cveoy.top/t/topic/pd62 著作权归作者所有。请勿转载和采集!