CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

真的没有办法了吗?把CONSOLE程序的输出导入到文件中,用程序控制.

楼主WoodJohn(天在下雨,云在哭泣)2005-11-18 18:17:05 在 VC/MFC / 基础类 提问

命令行下用重定向是可以的.不要用system()哦,它会产生一个黑框框.  
   
  大家帮忙啊!!! 问题点数:50、回复次数:16Top

1 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-11-18 18:23:05 得分 0

a.exe>a.txt不行么Top

2 楼WoodJohn(天在下雨,云在哭泣)回复于 2005-11-18 19:04:33 得分 0

在命令行下敲a.exe   >   list.txt当然是可以了,但如何在程序中实现呢?  
  _execl("a.exe",   "a.exe",   ">list.txt",   NULL);  
  不管用啊.   大家帮忙哈!Top

3 楼Snow_Ice11111(雪上加冰)回复于 2005-11-18 19:55:16 得分 0

如果这个Console程序是自己写的话,就自己在程序中用CFile类或CStdioFile自己把输出结果写入指定文本文件。Top

4 楼goodboyws(深夜不眠者(VCMVP))回复于 2005-11-18 22:27:58 得分 2

不懂啊,汗Top

5 楼WoodJohn(天在下雨,云在哭泣)回复于 2005-11-18 23:23:40 得分 0

有代码的话当然好说了,呵呵Top

6 楼Mackz(在相互)回复于 2005-11-19 00:03:56 得分 2

用CreateProcess创建的时候可以制定stdin/stdout/stderr的句柄,然后……Top

7 楼Snow_Ice11111(雪上加冰)回复于 2005-11-19 00:12:57 得分 2

#include   <iostream.h>  
  #include   <afx.h>  
   
  void   main()  
  {  
  CStdioFile   file;  
  CString   str="\n这是我要添加在最后面的一行。";  
  file.Open("f:\\text.txt",CStdioFile::modeReadWrite);  
  file.SeekToEnd();  
  file.WriteString((LPCSTR)str);     //自己打开这个文件查看一下,呵呵,偷个懒  
  file.Close();  
  }  
  Top

8 楼JerryGR(紫咖啡)回复于 2005-11-19 03:27:36 得分 2

试试  
      GetStdHandle  
      ReadConsoleOutput  
  函数吧Top

9 楼WoodJohn(天在下雨,云在哭泣)回复于 2005-11-19 17:46:42 得分 0

研究了一下,原来是如此简单!  
   
  #include   <io.h>  
  #include   <stdio.h>  
  #include   <process.h>  
   
  int   main()  
  {  
  FILE*   fp=fopen("list.txt",   "w");  
  _dup2(_fileno(fp),1);  
  _spawnl(_P_WAIT,   "hello.exe",   "hello.exe",   NULL);  
  fclose(fp);  
  return   0;  
  }  
   
  //hello.c,   produce   hello.exe  
  #include   <stdio.h>  
   
  int   main()  
  {  
  printf("Hello,world!\n");  
  return   0;  
  }Top

10 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2005-11-19 21:33:24 得分 5

用CreateProcess把输出管道重定向到文件,这样输入就到文件了。创建的时候,加入SW_HIDE选项,这样就不会出现控制台窗口。Top

11 楼lonely001(独行客)回复于 2005-11-19 22:34:39 得分 2

楼上正解,用管道!!!  
  Top

12 楼WoodJohn(天在下雨,云在哭泣)回复于 2005-11-20 09:23:00 得分 0

_dup2还是不行,会弹出CONSOLE框,真是郁闷!  
  Top

13 楼WoodJohn(天在下雨,云在哭泣)回复于 2005-11-20 09:25:39 得分 0

楼上两位大哥,能不能把我给的例子改出来?我试了一下还是不行啊  
  万分感谢!!Top

14 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-11-20 09:42:56 得分 35

http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=185751  
   
  这个问题我前天还在做呢,经过1个星期的寻找,我找到了,是用window     管道技术来做的。      
     
  void     CDosWindowsDlg::OnButton1()          
  {      
                        //     TODO:     Add     your     control     notification     handler     code     here      
    SECURITY_ATTRIBUTES     sa;      
    HANDLE     hRead,hWrite;      
     
    sa.nLength     =     sizeof(SECURITY_ATTRIBUTES);      
    sa.lpSecurityDescriptor     =     NULL;      
    sa.bInheritHandle     =     TRUE;      
    if     (!CreatePipe(&hRead,&hWrite,&sa,0))     {      
                        MessageBox("Error     On     CreatePipe()");      
                return;      
    }          
     
    STARTUPINFO     si;      
    PROCESS_INFORMATION     pi;          
    si.cb     =     sizeof(STARTUPINFO);      
    GetStartupInfo(&si);          
    si.hStdError     =     hWrite;      
    si.hStdOutput     =     hWrite;      
    si.wShowWindow     =     SW_HIDE;      
    si.dwFlags     =     STARTF_USESHOWWINDOW         &brvbar;     STARTF_USESTDHANDLES;      
    if     (!CreateProcess(NULL,"cmd.exe     /c     dir     /?"      
                            ,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))     {      
                            MessageBox("Error     on     CreateProcess()");      
                            return;      
    }      
    CloseHandle(hWrite);      
     
    char     buffer[4096]     =     {0};      
    DWORD     bytesRead;          
    while     (true)     {      
                    if     (ReadFile(hRead,buffer,4095,&bytesRead,NULL)     ==     NULL)      
                                    break;      
                    m_Edit1     +=     buffer;//m_Edit1是CString      
                    UpdateData(false);      
                    Sleep(200);          
    }          
  }      
     
  Top

15 楼WoodJohn(天在下雨,云在哭泣)回复于 2005-11-20 10:56:19 得分 0

谢谢vcmute(横秋)!我试试看行不行Top

16 楼WoodJohn(天在下雨,云在哭泣)回复于 2005-11-20 11:55:44 得分 0

vcmute(横秋)的方法可以!谢谢!!Top

相关问题

  • 如何程序控制输出信息为"n行n列"?
  • 请问怎样用程序控制DTS的数据导入和导出?
  • 用程序控制光驱
  • 程序控制dbgrid的?
  • VC程序控制 Excel 画表格线 ?
  • 怎样用vb程序控制ie?
  • 如何用程序控制菜单?
  • 请问如何用程序控制word2000
  • CButton如何用程序控制
  • php程序控制打印的问题!

关键词

  • 文件
  • sa
  • null
  • hwrite
  • si
  • 程序
  • cstdiofile
  • hread
  • createprocess
  • 管道

得分解答快速导航

  • 帖主:WoodJohn
  • goodboyws
  • Mackz
  • Snow_Ice11111
  • JerryGR
  • kugou123
  • lonely001
  • vcmute

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo