调试程序时发现一个错误:在运行过程中,删除xml文件,然后再入库,关闭程序,启动时初始化失败。原因:运行时,会把XML内容保存在内存中,如果删除XML文件,内存变量没有情况,导致图片对象个数统计不准确,然后再次启动初始化时无法准确判断循环结束。
解决方法:想办法判断xml文件被不存在。网上搜了一圈,没有找到很好的方案。仔细分析和跟踪代码时,发现如果文件不存在,并且打开方式是CV_STORAGE_READ时,返回空指针,如果是其他方式,则无法判断。下面代码就是判断后面代码要操作的文件是否被破坏,如果是,则清空相关变量,以免数据不一致。
CvFileStorage *fsCateInfo = cvOpenFileStorage(this->CateFileName, 0, CV_STORAGE_READ);//"CateInfo.xml"
if(!fsCateInfo)
{
//可能是数据文件被删除或破坏,必须清空相关统计信息
this->CateInfoList.clear();
this->nObjectCnt = 0;
this->DCTMatList.clear();
this->SimInfoList.clear();
}
cvReleaseFileStorage( &fsCateInfo );
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/EffectiveAgui/archive/2010/08/03/5784625.aspx