我正在编写一个函数,该函数应该(如果文件已经存在)将第一个数字递增1并将函数的参数附加到文件的末尾。
示例:
文件内容为1: 1 \ n 4 \ n 9
2处的文件内容: 2 \ n 4 \ n 9 \ n 5 \ n 6
int append (int obj, int objType) {
ifstream infile;
infile.open("stuff.txt");
if (infile.fail()){
infile.close();
ofstream outfile;
outfile.open("stuff.txt");
outfile << 1 << endl << obj << endl << objType;
outfile.close();
}
else {
int length = 0;
while (!infile.eof()){
int temp;
infile >> temp;
length ++;
}
infile.close();
infile.open("stuff.txt");
int fileContents[length];
int i = 0;
while (!infile.eof()){ /*PROGRAM DOES NOT ENTER HERE*/
infile >> fileContents[i];
i ++;
}
infile.close();
ofstream outfile;
outfile.open("stuff.txt");
fileContents[0] +=1;
for (i = 0; i < length; i++){
outfile << fileContents[i] << endl ;
}
outfile << obj << endl << objType;
}
程序永远不会进入第二个while循环,因此内容永远不会复制到数组中,然后再复制到文件中。我不确定问题究竟是什么或如何解决它。任何帮助将不胜感激。 :)
答案 0 :(得分:2)
你还没有读过来重置EOF标志,所以你仍然从前一个文件中获取EOF。
这不是正确的文件输入方式。尝试更像这样的东西:
int temp;
while (infile >> temp)
{
...
}
请参阅Neil Butterworth的博客文章,他在之前的问题中将其链接起来:http://punchlet.wordpress.com/2009/12/01/hello-world/
答案 1 :(得分:2)
而不是以这种方式关闭和重新打开文件(我不确定此操作是否会重置您需要的文件位置!)为什么不使用std::fstream::seekg()
并将文件“倒回”到开头
infile.seekg(0, ios::beg)