//创建或续写目录下的csv文件,填写“文件位置-分类”对
int writeCsv(const string& filename,const Vector<pair<string,string>>srcVect,char separator ){
ofstream file(filename.c_str(),ofstream::app);
if (!file)
return 0;
for (int i=0;i<srcVect.size();i++){
file<<srcVect[i].first<<separator<<srcVect[i].second<<endl;
}
return srcVect.size();
}
//读取目录下的csv文件,获得“文件位置-分类”对
vector<pair<string,string>> readCsv(const string& filename, char separator) {
pair<string,string> apair;
string line, path, classlabel;
vector<pair<string,string>> retVect;
ifstream file(filename.c_str(), ifstream::in);
if (!file)
return retVect;
while (getline(file, line)) {
stringstream liness(line);
getline(liness, path, separator);
getline(liness, classlabel);
if(!path.empty() && !classlabel.empty()) {
apair.first = path;
apair.second = classlabel;
retVect.push_back(apair);
}
}
return retVect;
}
csv文件是最为简单的带格式文件。这种格式在opencv的人脸识别教程中得到了使用,这里是扣的它的代码。
//获得ini文件中的值
CString GetInitString( CString Name1 ,CString Name2){
char c[100] ;
memset( c ,0 ,100) ;
CString csCfgFilePath;
GetModuleFileName(NULL, csCfgFilePath.GetBufferSetLength(MAX_PATH+1), MAX_PATH);
csCfgFilePath.ReleaseBuffer();
int nPos = csCfgFilePath.ReverseFind ('\\');
csCfgFilePath = csCfgFilePath.Left (nPos);
csCfgFilePath += "\\Config" ;
BOOL br = GetPrivateProfileString(Name1,Name2 ,"0",c, 100 , csCfgFilePath) ;
CString rstr ;
rstr .Format("%s" , c) ;
return rstr ;
}
//写入ini问价中的值
void WriteInitString( CString Name1 ,CString Name2 ,CString strvalue){
CString csCfgFilePath;
GetModuleFileName(NULL, csCfgFilePath.GetBufferSetLength(MAX_PATH+1), MAX_PATH);
csCfgFilePath.ReleaseBuffer();
int nPos = csCfgFilePath.ReverseFind ('\\');
csCfgFilePath = csCfgFilePath.Left (nPos);
csCfgFilePath += "\\Config" ;
BOOL br = WritePrivateProfileString(Name1 ,Name2 ,strvalue ,csCfgFilePath) ;
if ( !br)
TRACE("savewrong") ;
}
这两个函数主要是用来保存和修改配置文件的。通过直接将配置文件写入.ini中达到这个目标。