【问题标题】:Dumping a File into a String Array将文件转储到字符串数组中
【发布时间】:2014-05-23 18:12:51
【问题描述】:

我正在使用 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 文件。 (一个人不可能完成?)

【问题讨论】:

  • 您可以使用vector&lt;string&gt; 代替数组。
  • 我提到过,我的老板说不,要专注于字符串。

标签: c++ xml string file


【解决方案1】:
  • std::vector &lt; std::string&gt;

“我提到过,我的老板说不,要专注于字符串”

嗯,这是最首选、最简单、最不容易出错的解决方案。 抛开你的 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] 
}

注意:使用&lt;algorithm&gt;&lt;iterators&gt;,您可以用更少的代码行来实现。

推荐阅读:Why is iostream::eof inside a loop condition considered wrong?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多