请问大家c++很多cout 如何快速转换成全部写入文件。

lhslktg 2009-07-27 12:53:55


请问大家很多cout 如何快速转换成全部写入文件。

c++
比如


自己定义了一个函数:

void test()
{
double a;
string b;

写了很多别的code 然后
cout<< a<<" show c++ code"<<"/n"<<b;
然后又隔了许多代码。
又来 一些连续的
cout<<c<<" show c++ second " <<"/n"<< ff;
cout<<"what ? "

。。。。。。。。。。。
}

void main()
{

然后main 函数中
也有
cout<< stringl<<"This is main "<<endl<<ffe;


隔了很多代码
然后调用上面的含有 cout的 void test()
函数;
test()


之后隔了很多代码

cout<<stirngbbd<<"this is main second"<<end<<bdvalue;
cout<<bos<<"test "<<end;
连续的很多cout
}


1:
请问原来都是显示在屏幕上面,请问c++中要用什么代码才能快速转换全部写入文件中?
希望所有的写入都是直接接在之前写过的句子之后写。
就是不覆盖原来的句子。接着写 的 话如何快速修改?

要是想覆盖原来的句子又要如何修改呢?

是不是每个cout前面都要加上 打开文件的命令?
可否创建文件,打开文件的命令就写一次呢?

2
c++中如何新建一个文件,然后打开一个文件。然后写入一个文件。 格式如何?


3:

c++ 中如何控制写入文件的时候是接着写还是从头写?
请问如何控制从某一行开始写?
如何控制从某一行某一句开始写?

4如何控制跳转到文件中的某一行,然后找到某个单词,替换成别的内容? 或者从某处开始添加句子呢?

谢谢大家帮助。




谢谢帮助。
...全文
1760 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我觉得在C++还是用#include<fstream>更方便,你这个是c里面的啊。[Quote=引用 8 楼 的回复:]

不覆盖原来的句子的话,只要在main的第一句那里加上
freopen("out.txt","w",stdout);
就可以了。
[/Quote]
lhslktg 2009-08-21
  • 打赏
  • 举报
回复


请问大家:
我用的是VS 2008, 如果我想在debug 调试的时候,而不是程序编完了使用命令行的时候,
就让cout和printf 都能够同时输出到文件中和屏幕上面的话,我应该在什么地方加入什么代码呢?如何实现呢?

谢谢帮助

lhslktg 2009-08-19
  • 打赏
  • 举报
回复
还想再问一下大家:
我用的是VS 2008, 如果我想在debug 调试的时候,而不是程序编完了使用命令行的时候,
就让cout和printf 都能够同时输出到文件中和屏幕上面的话,我应该在什么地方加入什么代码呢?如何实现呢?
谢谢帮助
billow_zhang 2009-07-30
  • 打赏
  • 举报
回复
在此评论有限,我另写了一篇文章,答复了朋友和楼主的疑问,请参考。
http://blog.csdn.net/billow_zhang/archive/2009/07/30/4392427.aspx
ysysbaobei 2009-07-30
  • 打赏
  • 举报
回复
顶下
lhslktg 2009-07-30
  • 打赏
  • 举报
回复
开了,学习
lhslktg 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 billow_zhang 的回复:]
在此评论有限,我另写了一篇文章,答复了朋友和楼主的疑问,请参考。
http://blog.csdn.net/billow_zhang/archive/2009/07/30/4392427.aspx
[/Quote]

怎么打不开呀。网页打不开。

是不是所有的情况都有论述。
谢谢了
dfkjsdhfks 2009-07-29
  • 打赏
  • 举报
回复
哈哈,干脆再凑凑热闹...
#include <fstream>
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
ifstream file1("ac.txt");
ofstream file2("a.out",ios::out); //会覆盖
// ofstream file2("a.out",ios::out|ios::app); //追加
string str;
getline(file1,str);
file2<<str<<endl; //向file2中输出
cout<<str<<endl; //向屏幕输出
file2.close();
ofstream file3("a1.out",ios::out);
getline(file1,str);
file3<<str<<endl; //向file3中输出
cout<<str<<endl; //向屏幕输出
file3.close();
file1.close();
return 0;
}

ios::app: 以追加的方式打开文件
ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
ios::in: 文件以输入方式打开
ios::out: 文件以输出方式打开
ios::nocreate: 不建立文件,所以文件不存在时打开失败
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
ios::trunc: 如果文件存在,把文件长度设为0
可以用“或”把以上属性连接起来,如ios::out|ios::binary

文件还可以用open函数打开,ifstream和ofstream默认是输入输出文件流,可以不指定用于输入还是用于输出,fstream则没有指定,如果用fstream来定义文件流的话,必须指定是用于输入还是输出。如果是c的话,则用FILE来定义,同样必须指定是用来输入还是输出,r为只读,w为写,+表示可追加,如w+

这样应该可以实现lz所要的功能了吧
赵Andy 2009-07-29
  • 打赏
  • 举报
回复
xx
ZXW0521 2009-07-29
  • 打赏
  • 举报
回复
不改程序,把输出重定向到一个文件里,
dfkjsdhfks 2009-07-29
  • 打赏
  • 举报
回复
多谢mstlq啦,确实如此~_^
对于lz的问题,a <source.txt >result.txt就行,当然这样的话就必须set path或者是与这些txt文件和exe文件均在同一路径,否则就如一楼说的那样,每次都要指定执行路径。a.exe >c:\result.txt
天怒-无情 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 afraidhlq 的回复:]
引用 28 楼 lhslktg 的回复:
引用 26 楼 billow_zhang 的回复:
如果你想控制程序中的 cout输出,需要在程序开始添加下面的代码:

# include        <iostream>
# include        <fstream>


class dostream : public std::ostream {
  public:
    dostream() : ofs("test.log") {}

    template <typename _T>
    dostream& operator < < (_T& data)  {
      std::cout  < < data;
      ofs  < < data;

      return *this;
    }

  private:
    std::ofstream ofs;
};

dostream dout;

# define    cout        dout


这个是如何控制cout的输出的?
直接在程序最开始添加会有什么效果呢?
谢谢解答

这个是c++的重载(过载)操作符,用法是在你用cout 的地方改为为dout,只要报这个文件包含到工程中一起编译就行了,我的观点不知道对不对
[/Quote]
哦,不对还是用cout 因为有# define cout dout
天怒-无情 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 lhslktg 的回复:]
引用 24 楼 billow_zhang 的回复:
如果你使用的是linux或者UNIX系统的话,可以使用tee的命令,将输出既输出到文件中,又输出到屏幕上.假如你编写的程序编译连接后的可执行命令为 testcmd. 那么使用下面的命令:

testcmd | tee test.log

可以将testcmd 程序中的标准输出输出到test.log中,同时还会显示在屏幕上.
如果,你使用的是 Windows操作系统的话,可以自己写一个tee的程序.程序代码如下:

# include   <stdio.h>

int
main(int argc, char **argv)
{
  FILE *fp;
  int c;

  if ( argc > 1 )   {
    fp = fopen(argv[1], "w");
    if ( fp == NULL )   {
      fprintf(stderr, "%s: can not open  <%s>\n", argv[0], argv[1]);
      return -1;
    }
  } else
    fp = stdout;

  while ( (c = fgetc(fp)) != EOF )
    fputc(fp);

  return 0;
}


这个代码是应该如何用呀?

比如我原来已经有一段如 顶楼的代码。
我可以直接把这个代码加进去用吗?



[/Quote]
这个嘛,是相当于一个命令,不过是自己写的而以,单独编译成一个tee.exe文件放在你cmd 中工作的当前目录中,用的时候像这样 testcmd | tee test.log用就行了
原贴作者点评一下我说得对不?
天怒-无情 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 lhslktg 的回复:]
引用 26 楼 billow_zhang 的回复:
如果你想控制程序中的 cout输出,需要在程序开始添加下面的代码:

# include        <iostream>
# include        <fstream>


class dostream : public std::ostream {
  public:
    dostream() : ofs("test.log") {}

    template <typename _T>
    dostream& operator < < (_T& data)  {
      std::cout  < < data;
      ofs  < < data;

      return *this;
    }

  private:
    std::ofstream ofs;
};

dostream dout;

# define    cout        dout



这个是如何控制cout的输出的?
直接在程序最开始添加会有什么效果呢?
谢谢解答
[/Quote]
这个是c++的重载(过载)操作符,用法是在你用cout 的地方改为为dout,只要报这个文件包含到工程中一起编译就行了,我的观点不知道对不对
lhslktg 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 liao05050075 的回复:]
不覆盖原来的句子的话,只要在main的第一句那里加上
freopen("out.txt","w",stdout);
就可以了。
[/Quote]

请问这个要不要用了以后关闭。

我现在用这个, 比如前面一段输入到 文件a
freopen("outa.txt","w",stdout);
。。。。。。
cout〈〈

freopen("outb.txt","w",stdout); //后面要想改成另外输入文件b ,我就直接又加了这么一句
。。。。。。


这样用的话中间要不要关闭呢?
我发现这个好用咧。

2
要是下面的代码:

std::ofstream logFile("log.txt");
std::streambuf *outbuf = std::cout.rdbuf(logFile.rdbuf());

这样,你程序的所有使用 cout的输出都会写到 log.txt文件中.

程序结束的地方,要将cout恢复:
std::cout.rdbuf(outbuf);

不知要如何上实现前面的功能呢?就是某一段输出一个文件,另一段输出另一个文件。


3

freopen("outa.txt","w",stdout);

这个有没有对应的参数,比如只控制对cout 命令重定位输出到 某个文件,然后控制print 输出到另一个文件呢?

他能不能 单控制cout 输出某个文件, print 仍然屏幕。
cout 输出 屏幕, print 输出文件呢?

谢谢。
lhslktg 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 billow_zhang 的回复:]
如果你想控制程序中的 cout输出,需要在程序开始添加下面的代码:

# include <iostream>
# include <fstream>


class dostream : public std::ostream {
public:
dostream() : ofs("test.log") {}

template <typename _T>
dostream& operator < < (_T& data) {
std::cout < < data;
ofs < < data;

return *this;
}

private:
std::ofstream ofs;
};

dostream dout;

# define cout dout

[/Quote]

这个是如何控制cout的输出的?
直接在程序最开始添加会有什么效果呢?
谢谢解答
lhslktg 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 billow_zhang 的回复:]
如果你使用的是linux或者UNIX系统的话,可以使用tee的命令,将输出既输出到文件中,又输出到屏幕上.假如你编写的程序编译连接后的可执行命令为 testcmd. 那么使用下面的命令:

testcmd | tee test.log

可以将testcmd 程序中的标准输出输出到test.log中,同时还会显示在屏幕上.
如果,你使用的是 Windows操作系统的话,可以自己写一个tee的程序.程序代码如下:

# include  <stdio.h>

int
main(int argc, char **argv)
{
  FILE *fp;
  int c;

  if ( argc > 1 )  {
    fp = fopen(argv[1], "w");
    if ( fp == NULL )  {
      fprintf(stderr, "%s: can not open <%s>\n", argv[0], argv[1]);
      return -1;
    }
  } else
    fp = stdout;

  while ( (c = fgetc(fp)) != EOF )
    fputc(fp);

  return 0;
}



这个代码是应该如何用呀?

比如我原来已经有一段如 顶楼的代码。
我可以直接把这个代码加进去用吗?
[/Quote]

billow_zhang 2009-07-29
  • 打赏
  • 举报
回复
回31楼:你回答的万分正确.谢谢你!
billow_zhang 2009-07-29
  • 打赏
  • 举报
回复
如果你想控制程序中的 cout输出,需要在程序开始添加下面的代码:

# include <iostream>
# include <fstream>


class dostream : public std::ostream {
public:
dostream() : ofs("test.log") {}

template<typename _T>
dostream& operator<< (_T& data) {
std::cout << data;
ofs << data;

return *this;
}

private:
std::ofstream ofs;
};

dostream dout;

# define cout dout
billow_zhang 2009-07-29
  • 打赏
  • 举报
回复
回23楼:

打开两个文件的方法是:使用<打开输入文件, 使用>打开输出文件.比如,假设你的命令为testcmd, 输入文件是inf, 输出文件是outf,则可以使用下面的命令:

testcmd <inf >outf
加载更多回复(24)

64,660

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧