实时监控文件操作

#include <iostream>
#include <windows.h>
#include <thread>
#include <vector>

#define BUFFER_SIZE 2048

std::vector<char>g_buffers;


// 监控函数
BOOL MonitorFile(std::wstring&path) {

    PTCHAR pszDirectory =(PTCHAR)(path.c_str());
    // 打开目录, 获取文件句柄
    HANDLE hDirectory = ::CreateFile(pszDirectory, FILE_LIST_DIRECTORY,
        FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
        FILE_FLAG_BACKUP_SEMANTICS, NULL);
    if (INVALID_HANDLE_VALUE == hDirectory){
        return FALSE;
    }

    BOOL bRet = FALSE;
    DWORD dwRet = 0;

    do
    {
        // 得到 缓冲区
        RtlZeroMemory(&g_buffers[0], BUFFER_SIZE);
        PFILE_NOTIFY_INFORMATION pFileNotifyInfo = (PFILE_NOTIFY_INFORMATION)&g_buffers[0];

        // 设置监控目录
        bRet = ::ReadDirectoryChangesW(hDirectory,
            pFileNotifyInfo,
            BUFFER_SIZE,
            TRUE,
            FILE_NOTIFY_CHANGE_FILE_NAME |            // 修改文件名
            FILE_NOTIFY_CHANGE_DIR_NAME |           // 修改文件夹名
            FILE_NOTIFY_CHANGE_ATTRIBUTES |            // 修改文件属性
            FILE_NOTIFY_CHANGE_LAST_WRITE,            // 最后一次写入
            &dwRet,
            NULL,
            NULL);
        if (FALSE == bRet){
            break;
        }
        // 判断操作类型并显示
        switch (pFileNotifyInfo->Action)
        {
        case FILE_ACTION_ADDED:
        {
            // 新增文件
            std::cout << "新增文件" << std::endl;
            break;
        }
        case FILE_ACTION_REMOVED:
        {
            // 移动文件
            std::cout << "移动文件" << std::endl;
            break;
        }
        case FILE_ACTION_MODIFIED:
        {
            // 修改文件
            std::cout << "修改文件" << std::endl;
            break;
        }
        case FILE_ACTION_RENAMED_OLD_NAME:
        {
            // 重命名文件
            // 由于pFileNotifyInfo不是以零结尾的字符串 所以需要这么处理
            std::cout << "重命名" << std::endl;
            break;
        }
        default:
        {
            break;
        }
        }

    } while (bRet);


    // 关闭句柄, 释放内存
    ::CloseHandle(hDirectory);

    return TRUE;
}

int main()
{
    std::wstring path = L"F:/";
    g_buffers.resize(BUFFER_SIZE);
    std::thread t(MonitorFile,std::ref(path));
    
    while (1){
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring的基本使用

Java类一般的设计方法 —— 一个类做一方面工作&#xff0c;一个方法完成一件事情。 什么是Spring&#xff1f; Spring框架技术的构成&#xff08;7大核心功能&#xff09;&#xff1a;Spring Core&#xff08;内核&#xff09;、Spring AOP&#xff08;面向切面编程&#xff0…

Storyboard初体验

2019独角兽企业重金招聘Python工程师标准>>> Storyboard是iOS5的新特性。使用Storyboard可以更方便的管理应用的界面&#xff0c;同时为视图间的跳转提供了清晰的脉络。 任何时候你都可以在你的项目中添加Storyboard&#xff0c;不管你创建项目的时候有没有勾选“U…

网络地址 子网掩码 广播地址计算

已知一个ip地址是192.168.1.1&#xff0c;子网掩码是255.255.255.0&#xff0c;那么它的网络地址是多少&#xff1f; 192.168.1.0 已知某主机的ip地址是192.168.100.200&#xff0c;子网掩码为255.255.255.192&#xff0c;其网络内可用的ip地址个数为多少 62 1111 1111 1111 …

linux服务之DHCP

转自&#xff1a;http://best0.blog.51cto.com/444987/104151用Linux做DHCP服务器&#xff0c;原理跟在windows环境下、路由器上做DHCP相同&#xff0c;所以不在这里介绍了。我们直接开始配置dhcp服务器。这次介绍用Linux配置DHCP服务器&#xff0c;我以实验理论的方式介绍&…

Oracle RAC更改VIP IP地址_2节点的实验

本文转载&#xff1a;http://space.itpub.net/9664900/viewspace-676800 1、主机名规划&#xff1a; --更改前&#xff1a; #Public Network - (eth0) 192.168.10.11 rac1 192.168.10.12 rac2 #Private Interconnect - (eth1) 10.10.10.11 rac1priv 10.10.10.12 ra…

模板全特化和偏特化用法

#include <iostream> template <typename T, typename U> class TC { public: TC() { std::cout << "泛化版本构造函数" << std::endl; } void funtest() { std::cout << "泛化版本成员函数…

IIS Express 使用详细说明

最近在使用XP的IIS发布Asp.Net MVC3的项目&#xff0c;但是发现一个很头疼的一个问题&#xff0c;在IIS指定虚拟目录来发布网站发布不了&#xff0c;以前发布Webfrom项目则不会有这样的问题&#xff0c;应该是跟路由路径有关系&#xff0c;导致每次都是从网站根节点算起&#x…

qt项目转vs项目

先执行一下命令&#xff1a; call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat" SET "PATHD:\soft_install\qtcreator\5.12.10\msvc2017_64\bin;%PATH%" pause 执行完以上命令之后&#xff0c;再…

离奇的xenapp客户端无法加载应用故障解决过程 ...

新建的xenapp 6.5 for 2008 简体中文版&#xff0c;弄好之后从客户端去访问&#xff0c;结果报错&#xff08;当时忘了截图下来&#xff09;&#xff0c;大致意思就是说服务器无法处理我的请求。确认安装过程正确&#xff0c;程序发布正常。排查过程发现通过RDP的远程桌面可以加…

时间管理,从洗碗开始

笔者的前一篇博文《你是怎么利用时间的&#xff1f;》&#xff0c;自发表后得到了一些读者的关注和好评。更有甚者&#xff0c;博友shyy8712872还进一步发表了博文《老生常谈的时间你真的管理好了吗&#xff1f;》&#xff0c;并在其中引用了我的原话。这都令笔者深感欣慰、荣幸…

ADDS学习(下)

任务三&#xff1a;完成活动目录备份和恢复 1) 验证第一部分用户和OU是否存在 2) 备份活动目录 3) 删除一个OU 4) 恢复 5) 验证恢复是否成功 如下图&#xff0c;qingfeng.com域中有OU和用户&#xff0c; 要备份活动目录&#xff0c;使用微软的windows server backup工具&#x…

linux下boost库链接动态库失败

echo "boost库lib安装路径" >>/etc/ld.so.conf 加入动态库的地方 执行动态库命令 sudo ldconfig

一些Web Service的经验

使用Web服务也有半年多了&#xff0c;虽然时间不长&#xff0c;但还是遇到了不少难题&#xff0c;在这里把我的一些经验拿出来给大家共同分享。 刚开始做Web服务的时候还觉得很轻松&#xff0c;感觉就跟写一般的组件没什么区别&#xff0c;而使用时跟引用普通的程序集一样的简单…

递归1

此次做项目使用JDBC&#xff0c;遇到了一个树形结构&#xff0c;采用递归查找父类&#xff0c;有了一个初步的认识。 public Channel findParent(int id){ if (id0) { return null; }else { int parent 1; Channel cnew Chan…

ssh 脚本 空格字符转换

yum install -y doc2unix && doc2unix *.sh

⑨④-如果不发展就可能面临生存窘境

⑨④-如果不发展就可能面临生存窘境 老男孩语录⑨④-如果不发展就可能面临生存窘境 现实很残酷&#xff0c;如果你不去思考如何发展自己&#xff0c;就可能面临生存的窘境&#xff01; 上面这句话不光适合某一个个体人类&#xff0c;小到一个家庭&#xff0c;一个公司&#xff…

探究make_shared效率

Why Make_shared ? C11 中引入了智能指针, 同时还有一个模板函数 std::make_shared 可以返回一个指定类型的 std::shared_ptr, 那与 std::shared_ptr 的构造函数相比它能给我们带来什么好处呢 ? 优点 效率更高 shared_ptr 需要维护引用计数的信息, 强引用, 用来记录当前…

vs2012里用easyUI,显示不正常

vs2012里用easyUI&#xff0c;显示不正常&#xff0c;什么时候可以解决转载于:https://www.cnblogs.com/zhangxj/archive/2013/01/05/2846235.html

asp.net实现ftp上传代码(解决大文件上传问题)

原来使用asp.net上传控件上传 那个虽然简单但是页面不是很友好 然后就用了uploadify上传控件 这个控件虽然界面友好 但是大文件还是不能上传 而且在不同的浏览器会出现session丢失问题 所以我到了个ftp上传的方法 以下是具体代码 View Code?11 using System; 2 using System…

关于豆瓣电台收费的思考

大家讨论的热火朝天啊大家的问题&#xff1a;电台的盈利模型是不是只有广告我觉得电台的盈利只靠广告是不行的&#xff0c;所谓电台就是主要是多播和广播&#xff0c;是相对传统电台来的。传统电台涉及硬件成本低。广告可以&#xff0c;互联网电台依靠广告盈利&#xff0c;除非…