1

我目前这样做是为了将 an 的内容写入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

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

所以我将 to 移到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): Duplicated key)

4

2 回答 2

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;

对我来说很干净。

于 2015-02-02T11:41:16.887 回答
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>只能持有这么多的问题。

解决这个问题会很好!

于 2015-02-02T13:18:15.800 回答