我有这样的功能:
void my_func(unordered_map<std::string, std::string> arg){
//Create/open file object on first call and append to file on every call
//Stuff
}
在这个函数里面我希望写一个文件。如何在不必在调用者中创建文件对象并将其作为参数传递的情况下实现此目的?每次调用该函数时,我都希望将最新的写入附加到文件的末尾。
答案 0 :(得分:2)
void my_func(unordered_map<std::string, std::string> arg){
static std::ofstream out("output.txt");
// out is opened for writing the first time.
// it is available for use the next time the function gets called.
// It gets closed when the program exits.
}
答案 1 :(得分:1)
传递两个字符串/ char数组。一个是文件路径,另一个是要写入的数据。使用fstream myFile(fstream::out | fstream::app)
需要解释吗?如果你愿意,我可以写一个完整的例子。
修改强>
忘了提,这会做你想要的,但你每次都会创建文件对象。但是,您不会每次都创建新文件。这是fstream::app
的用途。您打开文件并从最后开始。
答案 2 :(得分:1)
另一种选择是使用仿函数。这将使您有可能控制文件对象的生命周期,甚至可以传递函数对象
#include <string>
#include <fstream>
#include <unordered_map>
struct MyFunc {
MyFunc(std::string fname) {
m_fobj.open(fname);
};
~MyFunc() {
m_fobj.close();
};
void operator ()(std::unordered_map<std::string, std::string> arg) {
// Your function Code goes here
};
operator std::ofstream& () {
return m_fobj;
};
std::ofstream m_fobj;
};
int main() {
MyFunc my_func("HelloW.txt");
my_func(std::unordered_map<std::string, std::string>());
std::ofstream &fobj = my_func;
return 0;
};