我对ofstream有一点问题。我的 main 多次调用某个类,每次使用不同的参数进行测试
ImageComparison* imco = new ImageComparison(queries[i], j, k, l);
在每个实例中,我都想要一个格式化的输出到一个文件,所以我首先尝试了这个
ofstream ofs;
ofs.open("somepath" + params + ".txt");
ofs << "write results";
ofs.close();
我预计 ofstream 会创建几个文件,由于不同的参数和不同的文件名,并在其中写入一些内容。但似乎它总是覆盖以前的文件并只保存最后一个实例。
之后,我尝试一遍又一遍地使用一个文件并附加新行,因为这对于我的情况来说是一个更好的解决方案
ofstream ofs;
ofs.open("somename.txt", ofstream::out | ofstream::app);
ofs << "write params";
ofs << "write results in same line";
ofs << endl;
ofs.close();
在这种情况下,它似乎没有附加新行,而是覆盖了前一行,最后我只得到了最后一个实例的结果。
请启发我,我不知道这里有什么问题。
我感谢任何建议/解决方案:)
编辑:这是具体案例:
主要:
vector<string> queries = {"apple","banana","book"...};
for(int i=0; i<18; i++) {
//if(i==1) break;
for(int j=0; j<3;) {
//if(j==2) break;
for(int k=10; k<800;) {
//if(k==400) break;
for(int l=50; l<600;) {
ImageComparison* imco = new ImageComparison(queries[i], j, k, l);
imco->DoImCo();
delete imco;
}
}
}
}
ImageComparison.cc:
string bloo = "../ImageData/" + m_object_type + "/" + m_object_type + "metric=" + to_string(m_metric) + ",hessian=" + to_string(m_hessian) + ",words" + to_string(m_number_of_words) + ".txt";
ofstream ofs;
ofs.open(bloo.c_str(), ofstream::out | ofstream::app);
for(int i=0; i<image_names.size(); i++) {
if(similarity_of_one[i] < similarity_average) {
ofs << " x";
}else{
ofs << " v";
}
}
ofs << endl;
ofs.close();
EDIT2:忘记了"for"中的参数增加,但我认为并不重要
您是否尝试仅使用示例代码的这一部分启动一个新项目?它不会为您附加新行吗?
块引用
ofstream ofs;
ofs.open("somename.txt", ofstream::out | ofstream::app);
ofs << "write params";
ofs << "write results in same line";
ofs << endl;
ofs.close();
尝试仅使用流::应用程序,它会自动为您创建新文件。坦率地说,我认为上面的代码没有任何问题。
(对不起,我从来没有回答过。它看起来很蹩脚:( )
终于,我发现了一些东西。名字似乎有问题。使用常量名称(如"../测试.txt"它工作正常,门槛不知道为什么,但问题消失了。非常感谢您的所有建议。