将 ostringstream 输出到文件

Output a ostringstream to file

我目前这样做是为了将 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):重复键)

如果有帮助,我在 class 级别打开一个 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;

适合我。

由于反应很少,我将不得不解决这个问题:

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> 只能容纳这么多的问题。

最好能解决这个问题!