C++函数cout重定向到文件
C++ function cout redirect to file
假设我有一个名为 print
的简单函数,它有一个使用 cout
将 1-5 打印到控制台的循环。
有什么方法可以做类似的事情:
file << print ();
要将 print
的输出保存到文件中?显然假设我使用 ofstream
正确打开文件,以及所有内容。
假设 print
是一个 void
函数,其输出硬编码为 cout
,您无能为力:输出将由执行环境的分配控制输出流的(默认控制台或使用 >myoutput.txt
的文件重定向)。
如果您希望您的程序控制输出的位置,请将 ostream&
传递给您的 print
函数,并将其用于输出:
void print(ostream& ostr) {
// use ostr instead of cout
ostr << "hello, world!" << endl;
}
如果要print
输出到控制台或默认输出,调用
print(cout);
如果你想让它写入一个文件,做一个ofstream
,然后把它传递给print
:
ofstream file("hello.txt");
print(file);
"Is there a way?":不...不更改 print()
and/or 在调用方中添加更多代码。当你说...
file << print();
...发送到文件流的是 return 由 print()
编辑的内容。正如您所说 print()
正在将所需的输出发送到 std::cout
,return 值表面上不会包含我们在 file
中想要的任何内容,因此除非它是一个空字符串调用者最好不要写 file << print();
.
相反,调用者应该在调用 print()
之前将输出转移到 cout
到 file
:James' answer here 展示了如何做到这一点。
假设我有一个名为 print
的简单函数,它有一个使用 cout
将 1-5 打印到控制台的循环。
有什么方法可以做类似的事情:
file << print ();
要将 print
的输出保存到文件中?显然假设我使用 ofstream
正确打开文件,以及所有内容。
假设 print
是一个 void
函数,其输出硬编码为 cout
,您无能为力:输出将由执行环境的分配控制输出流的(默认控制台或使用 >myoutput.txt
的文件重定向)。
如果您希望您的程序控制输出的位置,请将 ostream&
传递给您的 print
函数,并将其用于输出:
void print(ostream& ostr) {
// use ostr instead of cout
ostr << "hello, world!" << endl;
}
如果要print
输出到控制台或默认输出,调用
print(cout);
如果你想让它写入一个文件,做一个ofstream
,然后把它传递给print
:
ofstream file("hello.txt");
print(file);
"Is there a way?":不...不更改 print()
and/or 在调用方中添加更多代码。当你说...
file << print();
...发送到文件流的是 return 由 print()
编辑的内容。正如您所说 print()
正在将所需的输出发送到 std::cout
,return 值表面上不会包含我们在 file
中想要的任何内容,因此除非它是一个空字符串调用者最好不要写 file << print();
.
相反,调用者应该在调用 print()
之前将输出转移到 cout
到 file
:James' answer here 展示了如何做到这一点。