输出ostringstream到文件

时间:2015-02-02 10:53:40

标签: c++ string ostringstream

我目前这样做是为了将ostringstream的内容写入文件:

... // -- Loop 1 Start

std::ostringstream osStr;

... // -- Loop 2 Start

    cv::string s(osStr.str());
    std::istringstream iss(s);
    cv::vector<cv::string> subVec;
    do{
        cv::string sub;
        iss >> sub;
        subVec.push_back(sub);
    } while (iss);

    cv::FileStorage fs("subVec.txt", cv::FileStorage::WRITE);
    fs << "subVec" << subVec;
    fs.release();

... // -- Loop 2 End

... // -- Loop 1 End

但这会覆盖之前文件中的内容。

所以我将cv::FileStorage fs("subVec.txt", cv::FileStorage::WRITE);移到循环之前,将fs.release移到循环之后。

cv::FileStorage fs("subVec.txt", cv::FileStorage::WRITE);

... // -- Loop 1 Start

std::ostringstream osStr;

... // -- Loop 2 Start

    cv::string s(osStr.str());
    std::istringstream iss(s);
    cv::vector<cv::string> subVec;
    do{
        cv::string sub;
        iss >> sub;
        subVec.push_back(sub);
    } while (iss);

    fs << "subVec" << subVec;

... // -- Loop 2 End

... // -- Loop 1 End

fs.release();

这种方式起作用,因为它连续写入.txt,但由于重复键而无法使用:

%YAML:1.0
subVec:
   - "1"
   - "2"
...
   - "33"
   - "34"
subVec:
   - "1"
   - "3"
...
   - "30"
   - "31"

了解如何重复 subVec

我正在寻找一种方法将ostringstream的内容保存到一个文件中,每次都不会覆盖内容,但实际上是可读的。

OpenCV错误:cvGetFileNode中的解析错误(subVec.txt(27):重复键)

2 个答案:

答案 0 :(得分:2)

如果有帮助,我在课程级别打开一个std::ofstream m_OutFile成员,在构造函数调用中用m_OutFile.open(file.c_str(), std::ios::out);打开它。我还给它一个缓冲区来保存硬盘访问:

m_OutFile.rdbuf()->pubsetbuf(m_CharBuffer,BUFFER_SIZE);

然后每当我想在函数中写入它时,我都会使用

std::ostringstream oStr;
oStr << "some text and things" << std::ends;
m_OutFile << oStr.str() << std::endl;

为我工作很好。

答案 1 :(得分:1)

由于没有什么回应,我不得不解决这个问题:

cv::vector<cv::string> subVec; // -- MOVED
cv::FileStorage fs("subVec.txt", cv::FileStorage::WRITE);

... // -- Loop 1 Start

std::ostringstream osStr;

... // -- Loop 2 Start

    cv::string s(osStr.str());
    std::istringstream iss(s);
    do{
        cv::string sub;
        iss >> sub;
        subVec.push_back(sub);
    } while (iss);

... // -- Loop 2 End

... // -- Loop 1 End

fs << "subVec" << subVec; // -- MOVED
fs.release();

虽然它确实让我cv::vector<cv::string>能够持有这么多的问题。

修复此问题会很好!