真的没有办法了吗?把CONSOLE程序的输出导入到文件中,用程序控制.
命令行下用重定向是可以的.不要用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 ¦ 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




