MFC控制台指令的重定向输出到文件方法
来源:互联网 发布:bangumi 知乎 编辑:程序博客网 时间:2024/04/27 13:59
前一篇文章讲过如何隐藏控制台窗口,并把结果返回。但是控制台有个输出重定向输出到文件功能,这个在createprocess中是不支持的。因此那个函数改进如下
TCHAR strLog[1024]={0};
CString strCmp =_T("test.exe abc>abc.h");
RunCMD(strLog,strCmp.GetBuffer(),TRUE);//这个是用法
BOOL RunCMD(TCHAR *pLog,TCHAR *pCmd,BOOL bReconstruct)//最后这个参数说明是否重定向到文件
{
SECURITY_ATTRIBUTES sa;
BOOL ret;
sa.nLength=256;
sa.lpSecurityDescriptor=0;
sa.bInheritHandle=TRUE;
HANDLE hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;
HANDLE hOpenFile;
CString strReconstruct;
////////////
_SECURITY_ATTRIBUTES sec;
sec.bInheritHandle=TRUE;//这个东西不添加就不会写入文件 解决运行完毕但是文件为空的问题
sec.lpSecurityDescriptor=NULL;//这个东西不添加就会返回998
/////////////
ret=CreatePipe(&hReadPipe2,&hWritePipe2,&sa,0);
if(bReconstruct)
{
strReconstruct = pCmd;
strReconstruct = strReconstruct.Right(strReconstruct.GetLength()-strReconstruct.ReverseFind('>')-1);
hOpenFile = (HANDLE)CreateFile(strReconstruct.GetBuffer(), GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ,&sec, CREATE_NEW,NULL, NULL);
if (hOpenFile == INVALID_HANDLE_VALUE)
{
int iRes = GetLastError();
hOpenFile = NULL;
return FALSE;
}
}
else
{
ret=CreatePipe(&hReadPipe1,&hWritePipe1,&sa,0);//创建两个匿名管道
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si,sizeof(si));
si.cb = sizeof(si);
si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow=SW_HIDE;
si.hStdInput=hReadPipe2;
if(bReconstruct)
{
si.hStdOutput=si.hStdError=hOpenFile;
}
else
{
si.hStdOutput=si.hStdError=hWritePipe1;
}
ZeroMemory( &pi,sizeof(pi));
unsigned long lBytesRead;
char Buff[1024]={0};
CString strLog;
CreateProcess(NULL,pCmd,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi);
while(1&&!bReconstruct)
{
ret=PeekNamedPipe(hReadPipe1,Buff,1024,&lBytesRead,0,0);//管道是否有数据可读
if(lBytesRead&&pLog)
{
ret=ReadFile(hReadPipe1,Buff,lBytesRead,&lBytesRead,0);//读取管道里的数据
strLog.Format(_T("%S"),Buff);
StrCpy(pLog,strLog.GetBuffer());
if(!ret)
break;
}
else
break;
}
if(bReconstruct)
{
CloseHandle(hOpenFile);
}
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
return TRUE;
}
- MFC控制台指令的重定向输出到文件方法
- 控制台输出重定向到MFC的view对象里
- eclipse控制台输出重定向到文件
- mfc重定向到控制台
- 重定向控制台System.out.println输出到文件,再重定向回控制台
- MFC:Debug控制台重定向输出
- 控制台输出重定向到Memo
- eclipse控制台输出重定向到…
- 把控制台输入输出重定向到磁盘文件的C++方法
- 把控制台输入输出重定向到磁盘文件的C++方法
- python logging 替代print 输出内容到控制台和重定向到文件
- 控制台应用程序的输出流重定向
- 【eclipse】eclipse控制台输出定向到文件
- 将命令行工具的屏幕输出重定向到一个文件的方法
- 将命令行的输出重定向到某个文件
- python 的重定向输出到一个文件
- 将make的输出重定向到文件
- 关于将程序输出重定向到文件的实现
- ubuntu的 问 题
- MFC隐藏线程窗口并把输出返回的方法
- [小说连载]张小庆,在路上(29)-谢谢,再见
- dxlib在vs2008中的配置
- 枚举型
- MFC控制台指令的重定向输出到文件方法
- Android环境的搭建
- [小说连载]张小庆,在路上(30)-保持希望
- zoj 1453 Surround the Trees
- protell 99网络表装载错误处理
- zoj 2107 Quoit Design
- 什么是句柄?为什么会有句柄?HANDLE
- 收货-维修-送货+管理记录平台开发记录(一)————平台需求及数据库设计
- url