ReadDirectoryChangesW实现文件监控的封装类

本文介绍了一个使用MFC和Windows API实现的文件监控功能。通过CreateFile和ReadDirectoryChangesW函数来监听指定路径下文件的变化,如添加、删除、修改等,并记录这些事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void CfileWatcherDlg::watchFile(CString path)
{
    HANDLE hDir;
    char notify[1024]; 
    DWORD cbBytes,i; 
     char AnsiChar[3]; 
     wchar_t UnicodeChar[2];
    hDir = CreateFile(
    path,                            // pointer to the file name
    FILE_LIST_DIRECTORY,                // access (read-write) mode
    FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,  // share mode
    NULL,                               // security descriptor
    OPEN_EXISTING,                      // how to create
    FILE_FLAG_BACKUP_SEMANTICS,         // file attributes

    NULL                                // file with attributes to copy

    );

    FILE_NOTIFY_INFORMATION *pnotify=(FILE_NOTIFY_INFORMATION *)notify; 
    FILE_NOTIFY_INFORMATION *tmp;
    if (hDir == INVALID_HANDLE_VALUE) 
    { 
 
        this->m_fileEventInfo.ReplaceSel("hDir:INVALID_HANDLE_VALUE\r\n");
        return;
    } 
    if(ReadDirectoryChangesW(hDir, &notify, sizeof(notify),
            TRUE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_DIR_NAME, 
            &cbBytes, NULL, NULL)) 
        { 
 
            tmp = pnotify;
            switch(tmp->Action) 
            { 
                case FILE_ACTION_ADDED: 
                this->m_fileEventInfo.ReplaceSel("Directory/File added (添加文件)- \r\n");
                break; 
                case FILE_ACTION_REMOVED:
                this->m_fileEventInfo.ReplaceSel("Directory/File removed (删除文件)- \r\n");
                break; 
                case FILE_ACTION_MODIFIED: 
                this->m_fileEventInfo.ReplaceSel("Directory/File modified (修改文件内容)- \r\n");
                break; 
                case FILE_ACTION_RENAMED_OLD_NAME: 
                this->m_fileEventInfo.ReplaceSel("Directory/File old name (修改文件名字)- \r\n");
                break; 
                case FILE_ACTION_RENAMED_NEW_NAME: 
                this->m_fileEventInfo.ReplaceSel("Directory/File new name - \r\n");
                break; 
                default: 
                break; 
            }
        }

}

使用的vs2010创建MFC工程,没遇到任何问题。

FILE_NOTIFY_INFORMATION结构体中FileName保存变化文件的文件名,不过是Unicode编码的WCHAR型,使用时要转化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值