背景:
     应用程序的配置文件被其它程序修改后,
     应用程序需要根据修改重新读取配置信息,
     因为不能重启该应用程序,
     故只能在配置文件更新后重新读入该文件。问题:
     应用程序如何得知文件被修改?(类似windows文件保护功能)要求:不使用定时检测,因为定时周期不好设定,太短影响影性能,且无意义(谁闲着没事老是改配置文件呀)。太长不利于及时更新。

解决方案 »

  1.   

    To hundlom(托克维尔) :
        更改配置文件的程序很多,任何文本编辑工具都可以修改。例如:Notepad、 UtralEdit、WinHex,
    Edit ...
      

  2.   

    用一个线程监测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;
    }
    }
    }
      

  3.   

    To everandforever(Forever) :
       非常感谢!
       虽然,还是有设定间隔时间的问题,但目前确实是一种不错的方法。
      

  4.   

    FindFirstChangeNotification不需要时间间隔,由操作系统通知你。