c++ 如何将控制台之前打印的所有内容全部复制到指定文本中?

我的C++程序中有很多输出的函数,然后现在想实现一个功能,就是相当于是把所有之前输出到屏幕上的内容全部复制到文本文件中去。有什么办法实现吗?(我会文件输出流)最好能够通过... 我的C++程序中有很多输出的函数,然后现在想实现一个功能,就是相当于是把所有之前输出到屏幕上的内容全部复制到文本文件中去。有什么办法实现吗?(我会文件输出流)最好能够通过函数或者神马的,还有格式的问题... 展开
 我来答
冰火梦幻
推荐于2017-09-02 · TA获得超过2308个赞
知道小有建树答主
回答量:1095
采纳率:57%
帮助的人:426万
展开全部

如果是想让程序运行时所有输出到屏幕的都改成输出到文件:

  1. 将所有代码中的cout统统查找替换成output。然后编译。

  2. 所有编译失败的地方,都是涉及到cout输出的函数。你在函数的参数列表末尾都增加一个参数,类型为ostream &,名字为output好了。默认参数值是一个全局的ostream类型变量,先设置成std::cout。

  3. 编译运行。此时程序应该和最初的效果完全一样。

  4. 如果想改成输出到文件,只要把那个全局ostream类型变量的值改成你的ofstream就行了。


如果单纯想将程序的屏幕输出改成输出到文件,那不用改代码,直接

./my_app.exe > output.txt

这里my_app.exe是你的程序可执行文件名称。


如果是C风格的输出,比如printf之类的,和C++风格一样用一个全局变量FILE *,初始值为stdout,然后所有参数增加一个FILE *类型参数,默认值为那个全局变量。所有printf都改成fprintf,FILE*的参数就是传入的那个新增参数。


专业点的方法是不要再代码中直接使用C/C++的输出库,而是自己写一个类,专门控制输入输出。

追问
您好,谢谢你耐心的回答。
我还想问一下,能不能保留在控制台的输出
然后通过一个函数或者什么的再之后把整个控制台的屏幕内容相当于是拷贝到一个文件里?
追答
一旦输出到控制台,内存里就不会保留输出结果了,所以也不可能通过程序调用某个函数实现复制到文件的功能。

想要将控制台的内容拷贝到文件,需要特殊的控制台界面,比如SecureCRT,预先设置好的话,就能将输出的文字保留一份到指定文件,但这只是控制台的功能,和程序无关。

所以如果要同时输出到控制台和文件的话,最好还是自己实现一个类,然后重载“>>”运算符,在类中先后调用cout >>和ofstream的>>。
由于这种方法还能实现日志等级划分(比如调试时打印所有日志,商用运行时打印常规的少量日志之类)以及日志文件分割(比如每次运行自动创建新文件、日期变更时自动创建以日期命名的文件、日志文件过大时自动切换到新的日志文件),所以在IT企业开发时常用。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式