C++监听文件夹下的添加、修改、删除文件事件
来源:互联网 发布:菅野洋子抄袭 知乎 编辑:程序博客网 时间:2024/05/17 07:18
#include <iostream>#include <windows.h>#include <tchar.h>#include <iomanip>using namespace std;void fileWatcher();int main(){ fileWatcher(); return 0;}void fileWatcher(){ DWORD cbBytes; char file_name[MAX_PATH]; //设置文件名; char file_rename[MAX_PATH]; //设置文件重命名后的名字; char notify[1024]; int count = 0; //文件数量。可能同时拷贝、删除多个文件,可以进行更友好的提示; TCHAR *dir = _T("D:\\FTP"); HANDLE dirHandle = CreateFile(dir, GENERIC_READ | GENERIC_WRITE | FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (dirHandle == INVALID_HANDLE_VALUE) //若网络重定向或目标文件系统不支持该操作,函数失败,同时调用GetLastError()返回ERROR_INVALID_FUNCTION { cout << "error" + GetLastError() << endl; } memset(notify, 0, strlen(notify)); FILE_NOTIFY_INFORMATION *pnotify = (FILE_NOTIFY_INFORMATION*)notify; cout << "Start Monitor..." << endl; while (true) { if (ReadDirectoryChangesW(dirHandle, ¬ify, 1024, true, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_SIZE, &cbBytes, NULL, NULL)) { //转换文件名为多字节字符串; if (pnotify->FileName) { memset(file_name, 0, strlen(file_name)); WideCharToMultiByte(CP_ACP, 0, pnotify->FileName, pnotify->FileNameLength / 2, file_name, 99, NULL, NULL); } //获取重命名的文件名; if (pnotify->NextEntryOffset != 0 && (pnotify->FileNameLength > 0 && pnotify->FileNameLength < MAX_PATH)) { PFILE_NOTIFY_INFORMATION p = (PFILE_NOTIFY_INFORMATION)((char*)pnotify + pnotify->NextEntryOffset); memset(file_rename, 0, sizeof(file_rename)); WideCharToMultiByte(CP_ACP, 0, p->FileName, p->FileNameLength / 2, file_rename, 99, NULL, NULL); } //设置类型过滤器,监听文件创建、更改、删除、重命名等; switch (pnotify->Action) { case FILE_ACTION_ADDED: count++; cout << "count = " << count << endl; cout << setw(5) << "file add:" << setw(5) << file_name << endl; break; case FILE_ACTION_MODIFIED: cout << "file modified:" << setw(5) << file_name << endl; break; case FILE_ACTION_REMOVED: count++; cout << count << setw(5) << "file removed:" << setw(5) << file_name << endl; break; case FILE_ACTION_RENAMED_OLD_NAME: cout << "file renamed:" << setw(5) << file_name << "->" << file_rename << endl; break; default: cout << "UNknow command!" << endl; } } } CloseHandle(dirHandle);}
1 0
- C++监听文件夹下的添加、修改、删除文件事件
- C# 添加,修改,删除 文件夹 文件 大全
- C#添加修改删除文件文件夹大全
- C# 添加,修改,删除 文件夹 文件 大全
- C# 添加,修改,删除文件夹/文件集合
- C# 添加,修改,删除文件夹/文件集合
- C# 添加,修改,删除文件夹/文件集合
- C# 添加,修改,删除文件夹/文件集合
- C# 添加,修改,删除文件夹/文件集合
- C# 添加,修改,删除文件夹/文件集合
- C# 添加,修改,删除文件夹/文件集合
- C# 添加,修改,删除 文件夹 文件 大全
- C#添加修改删除文件文件夹大全
- C# 添加,修改,删除文件夹/文件集合
- C/C++的删除文件夹下的所有文件
- 删除文件夹下的文件
- JS 添加/删除事件监听
- (OK) 通过 git 命令,添加/删除/修改 文件/文件夹
- Linux多线程相关事例
- Java final关键字
- LeetCode Compare Version Numbers
- The Log:每个程序员都应该知道有关实时数据的统一抽象(3)日志与实时流处理
- Nginx基础. Nginx中内存地址对齐(转)
- C++监听文件夹下的添加、修改、删除文件事件
- 消息推送实现方法、移动终端及消息推送系统
- System.OutOfMemoryException
- How Many Tables(hdu1213)
- FlyWeight模式/Facade模式
- sofa-pbrpc源码分析之RpcServerOptions
- leetcode--Search in Rotated Sorted Array
- 分片(Sharding)的全局ID生成
- swift for循环的使用