本人写了个小程序,是个类似于QQ的东西,客户端程序启动需要读取程序的配置文件和用户的配置文件,如果程序配置文件被删除,程序启动时会自动生成一个配置文件,但是如果配置文件被修改掉了,那么程序中用file.open来检测就不行,程序将无法运行.请各位大侠帮忙解决这个问题,谢了!
另外,用户配置文件里面还存储着用户的账号,密码和其他信息,用户登陆的时候需要它,并且该文件是可以追加数据的.
另外,用户配置文件里面还存储着用户的账号,密码和其他信息,用户登陆的时候需要它,并且该文件是可以追加数据的.
解决方案 »
- 如何写IE收藏夹?
- 如何等待多个线程全部退出?
- vc2003打印问题! “DocumentProperties”: 即使使用参数相关的查找,也未找到标识符
- 问题
- 对话框之间传消息的菜问题
- 如何调用DELPHI生成的DLL库的函数?
- 谁有实现 net use \ipc$username password 远程登陆的代码?给我看看好吗?
- 急问:如何判定数据已经接收完了?(在线等待)
- 望帮助解决CEdit的显示字符串的问题!(串口通信中遇到的!)接受缓冲区中已经正确收到,在edit显示中出了点毛病!F5和CTRL+F5执行的显示
- 帮助文件问题,在线等
- 进程之间能否传递对象?
- [求助]C++的一个问题
将改动时间写入文件,如果用户进入文件将你写入的时间修改了,它可以在里面乱改一气,让你无法得到你写入的时间,那你怎么比较呢?
To hcj2002(流浪者·躬自厚而薄责于人) (毕业ING & 求职ING)
能不能具体一点,这个API是怎么用的,可以解决我说的这个问题吗?
{
CFileChangeDoc* pDoc=(CFileChangeDoc*)lpParam;
ASSERT(pDoc);
CFile* pFile = pDoc->GetFile(pDoc->GetPathName(),
CFile::modeRead|CFile::shareDenyWrite,NULL);
ASSERT(pFile);
if(pFile)
{
// 保存上次写文件的时间
FILETIME ftLastWriteTime;
BY_HANDLE_FILE_INFORMATION fileinfo;
if(!GetFileInformationByHandle((HANDLE)pFile->m_hFile,&fileinfo))
return 0;
ftLastWriteTime=fileinfo.ftLastWriteTime;
pDoc->ReleaseFile(pFile,FALSE);
// 分离文件路径
char path[_MAX_PATH];
_splitpath(pDoc->GetPathName(), NULL, path, NULL, NULL);
while(1)
{
// 获取文件更改通知句柄
HANDLE hFileChanged=FindFirstChangeNotification(path,FALSE,
FILE_NOTIFY_CHANGE_LAST_WRITE|
FILE_NOTIFY_CHANGE_SIZE|
FILE_NOTIFY_CHANGE_FILE_NAME);
HANDLE hWaitEvents[]={pDoc->m_evStopWatch,hFileChanged};
// 等待文件更改通知或停止监视事件
DWORD dwResult=
WaitForMultipleObjects(2,hWaitEvents,FALSE,INFINITE);
FindCloseChangeNotification(hFileChanged);
if(dwResult==WAIT_OBJECT_0+1)
{
// 获取文件的保存时间
pFile = pDoc->GetFile(pDoc->GetPathName(),
CFile::modeRead|CFile::shareDenyWrite,NULL);
if(pFile)
{
if(GetFileInformationByHandle((HANDLE)pFile->m_hFile,
&fileinfo))
{
// 判断文件是否已更改
if((ftLastWriteTime.dwHighDateTime+
ftLastWriteTime.dwLowDateTime)!=
(fileinfo.ftLastWriteTime.dwHighDateTime+
fileinfo.ftLastWriteTime.dwLowDateTime))
pDoc->OnFileAlarm(FA_WRITTEN);
// 保存修改时间
ftLastWriteTime=fileinfo.ftLastWriteTime;
}
pDoc->ReleaseFile(pFile,FALSE);
}
else // 文件不存在,已被删除或移动
{
pDoc->OnFileAlarm(FA_FILELOST);
}
}
else
break;
}
}
return 0;
}
{
m_evStopWatch.ResetEvent();
AfxBeginThread(FileChangeWatch,(LPVOID)this);
}//Stop the watching thread
void CFileChangeDoc::WatchStop()
{
m_evStopWatch.SetEvent();
}
你的这个方法我考虑了一下,觉得还是不是太好,不能完全解决我这个问题,如果用户把文件的创建时间和修改时间都改掉了,那样岂不是没办法准确检测了