不使用定时检测,如何得知配置文件被修改

antonyhome 2005-09-29 11:20:30
背景:
应用程序的配置文件被其它程序修改后,
应用程序需要根据修改重新读取配置信息,
因为不能重启该应用程序,
故只能在配置文件更新后重新读入该文件。

问题:
应用程序如何得知文件被修改?(类似windows文件保护功能)

要求:不使用定时检测,因为定时周期不好设定,太短影响影性能,且无意义(谁闲着没事老是改配置文件呀)。太长不利于及时更新。

...全文
321 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabo 2005-10-04
  • 打赏
  • 举报
回复
建议:

这样的要求,可以在你程序里面实现。
配置里面的值读出来都是要用的,每一次(或者隔n次)使用这个值的时候就读一次做比较。
antonyhome 2005-09-30
  • 打赏
  • 举报
回复
To everandforever(Forever) :
非常感谢!
虽然,还是有设定间隔时间的问题,但目前确实是一种不错的方法。
DentistryDoctor 2005-09-30
  • 打赏
  • 举报
回复
FindFirstChangeNotification不需要时间间隔,由操作系统通知你。
oyljerry 2005-09-30
  • 打赏
  • 举报
回复
这种耗时操作等,开线程来处理比较好
贵子潘 2005-09-30
  • 打赏
  • 举报
回复
就everandforever这个方法,赞
everandforever 2005-09-29
  • 打赏
  • 举报
回复
用一个线程监测

HANDLE dwChangeHandle = FindFirstChangeNotification( _T("..\\cfg\\"), FALSE, FILE_NOTIFY_CHANGE_LAST_WRITE );
if( dwChangeHandle != INVALID_HANDLE_VALUE )
{
for( ; ; )
{
DWORD dwWaitStatus = ::WaitForSingleObject( dwChangeHandle, 1000 );
if( dwWaitStatus == WAIT_TIMEOUT )
{
if(bWaitingForExit)
{
FindCloseChangeNotification( dwChangeHandle );
break;
}
}
else if( dwWaitStatus == WAIT_OBJECT_0 ) // file changed
{
::PostMessage( hMainWnd, WM_FILECHAGNE_NOTIFY, 0, 0 );
if( !FindNextChangeNotification( dwChangeHandle ) )
{
FindCloseChangeNotification( dwChangeHandle );
break;
}
}
else // error
{
FindCloseChangeNotification( dwChangeHandle );
break;
}
}
}
antonyhome 2005-09-29
  • 打赏
  • 举报
回复
To hundlom(托克维尔) :
更改配置文件的程序很多,任何文本编辑工具都可以修改。例如:Notepad、 UtralEdit、WinHex,
Edit ...
hundlom 2005-09-29
  • 打赏
  • 举报
回复
把更改配置文件的程序作为远程线程嵌入应用程序中试试
UP
看谁还有好方法

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧