我正在使用Visual C ++和MFC程序,使用Visual Studio 2008,我将创建或附加到XML文件。
如果文件不存在,它将被创建,并且没有后顾之忧,但是当文件已经存在且我必须附加它时似乎存在问题。
我通过一些研究得到的指示是将文件读入字符串,备份一点,然后写入字符串的末尾。我的想法是将文件读入一个字符串数组。
bool WriteXMLHeader(string header, ofstream xmlFile)
{
int fileSize = 1;
while(!xmlFile.eof())
{
fileSize++;
}
string entireFile[fileSize];
for(int i = 0; i < fileSize; i++)
{
xmlFile >> entireFile[i];
}
//Processing code to add more to the end
//Save the File
return true;
}
但是,这会导致一个错误,其中wholeFile的大小未知,并且会弹出常量错误。
我不允许使用任何第三方软件(已经查看过TinyXML和RapidXML)。
在未知数量的结束标记之上附加到XML文件末尾的更好方法是什么?
编辑:我的老板一直在谈论发送到节点的路径,并在节点的最后一个实例之后写。如果需要,他希望能够处理带有一百万个缩进的xml文件。 (一个人不可能完成?)
答案 0 :(得分:3)
std::vector < std::string>
“我提到过,而我的老板说不,并专注于字符串”
这是最优选,最简单,最不容易出错的解决方案。 撇开你的xml解析,(如果有的话),无论是什么都会出现问题/困惑。
请考虑以下事项:
#include <vector>
#include <string>
//...
std::vector < std::string > entireFile;
while ( std::getline(xmlFile, line) )
{
entireFile.push_back( line ) ;
}
xmlFile.close( );
// entireFile now contains all lines from xml file.
// To iterate its just like simple array
for( std::size_t i = 0; i < entireFile.size( ); ++i )
{
// entireFile[i]
}
注意:使用<algorithm>
和<iterators>
,您可以在更少的代码行中实现此目的。
建议阅读:Why is iostream::eof inside a loop condition considered wrong?
如果你的老板不说,请问他为什么礼貌,为什么? 除非您厌倦了能力有限的特定环境/平台,否则没有任何正当理由。