C ++:为什么ofstream不附加或创建新文件?

时间:2013-09-19 21:29:20

标签: c++ ofstream

我对ofstream有点问题。我的主要调用某个类几次,每次都有不同的参数用于测试目的

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:忘记参数增加&#34;对于&#34;&#34;&#34;&#34;但我认为并不重要

2 个答案:

答案 0 :(得分:2)

您是否尝试仅使用此部分示例代码启动新项目?它不会为你添加新的线条吗?

  

块引用

ofstream ofs;
ofs.open("somename.txt", ofstream::out | ofstream::app);
ofs << "write params";
ofs << "write results in same line";
ofs << endl;
ofs.close();

尝试仅使用ofstream :: app,它会自动为您创建新文件。坦率地说,我认为上述代码没有任何问题。

(抱歉,我从来没有回答。看起来很蹩脚:()

答案 1 :(得分:0)

最后,我找到了一些东西。这个名字似乎有问题。使用常量名称后,如&#34; ../ Test.txt&#34;它运作良好,不知道为什么但问题已经消失。所有建议都很重要。