将文件转储到字符串数组中

Dumping a File into a String Array

本文关键字:数组 字符串 文件 转储      更新时间:2023-10-16

我正在使用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;
}

然而,这会导致一个错误,其中完整文件是未知大小,并有常数错误弹出。

我不允许使用任何第三方软件(已经研究过TinyXML和RapidXML)。

在XML文件末尾添加未知数量的结束标记的更好方法是什么?

编辑:我的老板一直在谈论发送到节点的路径,并在节点的最后一个实例之后写入。他希望它能够在需要时处理具有一百万缩进的xml文件。(一个人不可能完成?)

  • 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>,您可以在更少的代码行中实现这一点。

建议阅读:为什么循环条件中的iostream::eof被认为是错误的?

如果你的老板说不,礼貌地问他为什么,为什么?除非您厌倦了功能有限的特定环境/平台,否则不可能有任何正当的理由。