将文件转储到字符串数组中
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<string>
代替数组。
我提到过,我的老板说不,要专注于字符串。
【参考方案1】:
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?
如果你的老板说不,礼貌地问他为什么,为什么? 除非您厌倦了功能有限的特定环境/平台,否则没有任何正当理由。
【讨论】:
以上是关于将文件转储到字符串数组中的主要内容,如果未能解决你的问题,请参考以下文章
当我们使用 Glue 将数据从 DocumentDb 转储到 Redshift 时,从 Redshift 获取字符串而不是数组