小众知识

首页 > 正文

怎么定义一个输入输出流把输出到屏幕的信息再写入一个新建的文件中去?

我刚学c++的输入输出流对此不大熟悉,书上例子只简单介绍从文本文件中把信息读出来再显示到屏幕。我现在需要在调用某些函数后(有信息输出到屏幕),我需要把这些信息写入一个新文件中。但是不知道什么定义这个流和用这个流的什么成员函数才可以做到写入。请高手大师们多多指点!  

 lak47 发表于:2003-05-31 11:36:19
得分:10 

我在一本介绍C++的流上看到过这个问题的解决方案,好象是将新建的文件流和输出到屏幕的流共用一个缓冲区,具体的函数现在记不清了,你可以去找一下这本书,好象叫什么"C++的输入输出流与本地化" 

 lanziman 发表于:2003-05-31 11:56:16
得分:0 

谢谢提点,我试找找看。 

 mouseleeky 发表于:2003-05-31 13:25:42
得分:10 

首先要#include
这样定义了一个输出流:fstream fout("out.txt",ios::out);fout将把数据输出到文件out.txt中。这样定义了一个输入流:fstream fin("in.txt",ios::in);fin将从文件in.txt中读入数据。另外,这两个文件将于你的源文件在同一个文件夹中。
使用的时候,就和用cout与cin一样。 

 steedhorse 发表于:2003-05-31 13:33:05
得分:0 

使用fstream。 

 pzytony 发表于:2003-05-31 13:46:40
得分:0 


用c写更简单

fopen, fputc, fputs.等函数可用 

 i_jianyong 发表于:2003-05-31 13:59:50
得分:10 

renghfgh

#include 
using namespace std;

int main()
{
   const char* s1 = "Hello world!";
   const char* s2 = "... Bye!";

   ofstream ofs("anyfile.txt");
   ofs << s1 << s2 << endl;
 
  return 0;
}

 micropentium6 发表于:2003-05-31 14:07:50
得分:0 

如果我没理解错的话,楼主的意思是:

怎么把自己程序的stdout输出重定向到一个流文件中,是吗?

关注! 

 micropentium6 发表于:2003-05-31 14:09:48
得分:0 

哦,可能不叫重定向吧:)

就是如何把程序已经输出在屏幕上的字符再写回一个文件里^_^ 

 i_jianyong 发表于:2003-05-31 14:16:59
得分:0 

如果是楼上意思的话,在Linux下用输出重定向符 “>”。
例如,如果你的可执行程序名为 myapp,在linux下键入 myapp > result.txt
即可把输出信息存入文件result.txt中。

dos/windos下不清楚,哪位大侠知道? 

 Wendydd 发表于:2003-05-31 18:20:39
得分:0 

Linux下面是这样的
先关闭标准输出,这样会释放其设备号
然后再打开一个自定义的输出设备,这样会把刚刚释放的最小设备号分配给他
以后你就可以直接输出到这个自定义的设备中了 

 callzjy 发表于:2003-06-01 17:05:08
得分:0 

重定向> 

 fangrk 发表于:2003-06-02 22:15:54
得分:40 

应该对你有些启发:


#include 
#include 
using namespace std;
class Redirect{
public:
   Redirect(ostream&os1,ostream&os2):From(os1),To(os2){ ReBind();}
   ~Redirect(){Release();}
   void ReBind(){old=From.rdbuf(To.rdbuf());}
   void Release(){From.rdbuf(old);}
private:
   ostream& From;
   ostream& To;
   streambuf* old;
};
int main()
{
  ofstream output("out.txt");
  Redirect R(cout,output);
  for(int i=0;i<10;++i)
      cout<  R.Release();
  for(int i=10;i<20;++i)
  cout<  R.ReBind();
  for(int i=20;i<30;++i)
  cout<}

 pzytony 发表于:2003-06-02 22:22:46
得分:20 

函数名: fprintf 
功  能: 传送格式化输出到一个流中 
用  法: int fprintf(FILE *stream, char *format[, argument,...]); 
程序例: 

/* Program to create backup of the 
   AUTOEXEC.BAT file */ 

#include  

int main(void) 

   FILE *in, *out; 

   if ((in = fopen("\\AUTOEXEC.BAT", "rt")) 
       == NULL) 
   { 
      fprintf(stderr, "Cannot open input \ 
       file.\n"); 
      return 1; 
   } 

   if ((out = fopen("\\AUTOEXEC.BAK", "wt")) 
       == NULL) 
   { 
      fprintf(stderr, "Cannot open output \ 
       file.\n"); 
      return 1; 
   } 

   while (!feof(in)) 
      fputc(fgetc(in), out); 

   fclose(in); 
   fclose(out); 
   return 0; 




 xorong 发表于:2003-06-02 22:29:43
得分:10 

我的感觉是不是同时写到文件中和屏幕中去?
#include 
using namespace std;
class output
{
public:
    fstream file;
    
    template
    output & operator << ( T data ){
        cout << data;
        file << data;
        return output;
    }
    
};
用cout的地方都换成output,是不是有启发了呢? 

 lanziman 发表于:2003-06-03 20:51:08
得分:0 

(小笨,小心翼翼的答题) 
 
  哦,可能不叫重定向吧:)

就是如何把程序已经输出在屏幕上的字符再写回一个文件里^_^
 
 

我的要求的确就是要实现把在主函数里调用了函数(功能就是输出信息)之后把在屏幕显示的信息再写入文件里去.但是我没试过这样做.

 brucegong 发表于:2003-06-03 20:53:50
得分:0 






shell的输出重定向就可以啊





 lanziman 发表于:2003-06-04 16:10:00
得分:0 

例如:
#include
#include
#include
class Test
{
public:
   void Put(){cin>>s;}
   void Show(){cout<private:
   string;
};
void main()
{
    Test  T;
    T.Put();
    T.Show();
    ofstream  out("out.txt");//请问我要怎么做才可以把T.Show()调用后显示到屏幕的信息写到out.txt去?
    …………//下面的要做的是把已经到屏幕的信息写进out.txt去。谁这样做过?有人可以
//实现吗?
}

上一篇:请推荐软件行业的(专业)杂志!
下一篇:C++中内嵌类可以访问外部类的成员变量吗?

分享到: