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

Posted

技术标签:

【中文标题】将文件转储到字符串数组中【英文标题】: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; 代替数组。 我提到过,我的老板说不,要专注于字符串。 【参考方案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?

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

【讨论】:

以上是关于将文件转储到字符串数组中的主要内容,如果未能解决你的问题,请参考以下文章

当我们使用 Glue 将数据从 DocumentDb 转储到 Redshift 时,从 Redshift 获取字符串而不是数组

PHP 将数组转储到文件中

在 Swift 中搜索字典数组的值

C语言 文件方面 段错误 核心已转储 以及字符串查找删除的问题

以源文件的全精度将 HDF4 数组转储到 ascii

Swift - 添加到数组后 tableView 不重新加载