C++ : passing ofstream& to function to continually append to . txt 文件

标签 c++ pass-by-reference fstream ofstream

我正在为类编写一个程序,其中我需要从“main.cpp”多次调用一个函数,该函数将 ofstream 作为参数,并且该函数本身需要将新数据附加到 .txt 文件的末尾每次它被调用时(在这个例子中,为了简单起见,我制作了 int 类型的数据)。

发生的事情是,当该函数在 main 中被多次调用时,它只会覆盖所有内容,而不是将新数据附加到文件末尾。我知道我的程序中的其他所有内容都可以正常工作,所以我将尽可能地将它剥离到最基本的部分,这样这就不是 TL;DR。我已经包括

#include<fstream>
using namespace std;

在我所有的文件中。

这是它的要点:

在 main.cpp 中:

aClass* someClass = new aClass;
int data = 0;
...
ofstream myfile ("file.txt");
someClass->appendData(myfile, data);
...

在 aClass.h 中:

void appendData(ofstream& myfile, int data);

在 aClass.cpp 中:

void aClass::appendData(ofstream& myfile, int data){
    if(myfile.is_open()){
        myfile << data << "\n";
        myfile.close();
    }
    else cout << "Couldn't open file";
}

如果有人能帮我解决这个问题,我将不胜感激。出于某种原因,他们已经一年多没有让我们接触 fstreams 了,我不确定这里的问题是什么。

最佳答案

电话

myfile.close();

appendData 中是不对的。 myfile 上的任何后续输出操作都将被忽略。

从那里删除它。

您可以将它添加到 main 中,但它是可选的。析构函数将调用 close()。但是,如果您确定不再使用它来写入对象,那么调用对象上的 close() 也没有什么坏处

关于C++ : passing ofstream& to function to continually append to . txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46881837/

相关文章:

c++ - 显示数组中的 25 个随机数

C# 使用 params 关键字的结果不一致

c++ - 打开一个文件,修改每个字符然后做反向操作不输出原始文件

c++ - C++ 中的位缓冲区

c++ - 球体的光线追踪纹理实现

c++ - 需要对#pragma once 做一些澄清

c++ - 使用引用传递字符串需要进行哪些必要的更改

c++ - boost::ref 和 boost::asio 完成处理程序,按引用传递

C++ fstream 混淆

c++ - 如何在 C++ 中设置 Debug模式