检测磁盘文件是否发生变化
2013-08-05 18:30
253 查看
由于某种原因需要不断地检查磁盘或磁盘中的某个文件夹及文件夹内的子文件夹和文件是否发生了变化(如创建了新文件、创建了新文件夹,文件或文件夹被删除等),如需要做一个自动上传的客户端程序,往服务器上传文件,则可以使用:FindFirstChangeNotification API函数来决定什么时候可以上传:
HANDLE WINAPI FindFirstChangeNotification(
__in LPCTSTR lpPathName,
__in BOOL bWatchSubtree,
__in DWORD dwNotifyFilter
);
dwNotifyFilter参数标识了待检测的条件,当该条件成立时,FindFirstChangeNotification函数就会返回发生此次改变的通告对象句柄。
下面是使用该函数的一人示例程序,该程序使用一个线程来不断地检测D盘根目录下的文件夹及文件的状态变化。在该线程函数中,WaitForSingleObject函数等待D盘根目录下的文件夹及文件的状态变化。当有变化发生时, hChange将变成有信号状态。
DWORD CMainFrame::DetectDirThreadProc(LPVOID lpParam)
{
while(TRUE)
{
HANDLE hChange=::FindFirstChangeNotification("D:\\",TRUE,FILE_NOTIFY_CHANGE_SIZE/*| FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_DIR_NAME*/);
if (hChange == INVALID_HANDLE_VALUE)
{
AfxMessageBox("FindFirstChangeNotification() Error!");
return -1;
}
DWORD dwRet=::WaitForSingleObject(hChange,INFINITE);
if(WAIT_OBJECT_0==dwRet)
{
AfxMessageBox("Changing!");
}
}
return 0;
}
当dwNotifyFilter取值FILE_NOTIFY_CHANGE_SIZE,表示检测磁盘是否有文件写入,但创建文件及文件夹、移动文件或文件夹、永久删除文件及文件夹操作时该状态变化不会被标识。
HANDLE WINAPI FindFirstChangeNotification(
__in LPCTSTR lpPathName,
__in BOOL bWatchSubtree,
__in DWORD dwNotifyFilter
);
dwNotifyFilter参数标识了待检测的条件,当该条件成立时,FindFirstChangeNotification函数就会返回发生此次改变的通告对象句柄。
下面是使用该函数的一人示例程序,该程序使用一个线程来不断地检测D盘根目录下的文件夹及文件的状态变化。在该线程函数中,WaitForSingleObject函数等待D盘根目录下的文件夹及文件的状态变化。当有变化发生时, hChange将变成有信号状态。
DWORD CMainFrame::DetectDirThreadProc(LPVOID lpParam)
{
while(TRUE)
{
HANDLE hChange=::FindFirstChangeNotification("D:\\",TRUE,FILE_NOTIFY_CHANGE_SIZE/*| FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_DIR_NAME*/);
if (hChange == INVALID_HANDLE_VALUE)
{
AfxMessageBox("FindFirstChangeNotification() Error!");
return -1;
}
DWORD dwRet=::WaitForSingleObject(hChange,INFINITE);
if(WAIT_OBJECT_0==dwRet)
{
AfxMessageBox("Changing!");
}
}
return 0;
}
当dwNotifyFilter取值FILE_NOTIFY_CHANGE_SIZE,表示检测磁盘是否有文件写入,但创建文件及文件夹、移动文件或文件夹、永久删除文件及文件夹操作时该状态变化不会被标识。
相关文章推荐
- 保存时检测窗体上控件中的数据是否发生变化 asp
- 检测页面是否发生变化
- 使用powershell 与基线services列表比较,查看服务状态是否发生变化
- C# 传入引用类型的参数 返回值是否发生变化
- Flex中通过监听ObjectProxy的propertyChange事件检测一个Object是否变化的例子
- 校验基于EO的VO中的字段是否发生变化
- //用来观察system表里飞行模式所在行是否发生变化 , “行”内容观察者
- 按键精灵脚本多个if嵌套的时候 要合理的使用delay去判断界面是否发生变化
- 检查form表单数据是否发生变化
- JAVA 项目监听文件是否发生变化
- 存在依赖关系的存储过程与函数,其中的个别对象发生变化后,整个依赖关系是否自动保持?
- vue路由切换拦截,在每次发生路由导航时检测用户是否登录
- 监控链路路径是否发生变化的脚本
- 当子组件大小发生变化时,容器是否要及时响应?
- jquery 监听页面是否发生了变化
- c# 判断文件是否发生了变化
- EasyUI在表单提交时如何校验数据是否发生变化
- 解决触发器检测到活动的独立的事务处理, 已经回退、表发生了变化, 触发器/函数不能读它
- 进程死锁的检测:资源分配图的化简判断是否有死锁发生