我目前这样做是为了将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):重复键)
答案 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>
能够持有这么多的问题。
修复此问题会很好!