VC.重定向标准输出到文件(父进程方式)
1、libxml2 使用过程中,有时 libxml2里面会报一些错误信息,在 控制台的程序中 这些信息看起来比较乱,不易观察,我想将这些信息重定向到 文件中
1.1、本进程内:试着 将标准输出,标准错误等 重定向,但是 我的代码里面的标准输出和标准错误 都能重定向,但是libxml2中的信息 却重定向不成功... 试了好些方法都不行...
忘了具体 使用了哪些方式了....
1.2、父进程:通过父进程来重定向子进程的 标准输出和标准错误 到文件 --> 成功了 而且 不麻烦(这里就是采用的这个方式)
2、
2.1、参考网址:
2.2、测试代码:
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <io.h> #include <map> #include <math.h> #include <list> #include <string> #include <sstream> #include <algorithm>// std::find(...) #include <vector> using namespace std; //#include "stdafx.h" #include <iostream> #include <windows.h> #include <math.h> using namespace std; void main() { // ZC: baidu搜索"STARTUPINFO hStdOutput 重定向" // ZC: https://blog.csdn.net/cqupt_chen/article/details/8364259
// ZC: 部分(1) SECURITY_ATTRIBUTES sa= {sizeof(sa),NULL,TRUE};; sa.bInheritHandle = TRUE; //FILE* fp = fopen("D:\\G_DR_2018\\_G2SVG_Console_VS08\\_G2SVG_Console_VS08\\LOG\\zz.txt", "w+"); HANDLE houtputfile = CreateFileA("D:\\G_DR_2018\\_G2SVG_Console_VS08\\_G2SVG_Console_VS08\\LOG\\zz.txt", GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, &sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// ZC: 部分(2) //#define EXECDOSCMD "dir c:" //可以换成你的命令 #define EXECDOSCMD "_G2SVG_Console_VS08.exe" //可以换成你的命令 char command[1024]; //长达1K的命令行,够用了吧 strcpy(command,"Cmd.exe /C "); //strcpy(command,"Cmd.exe "); strcat(command,EXECDOSCMD);
// ZC: 部分(3) STARTUPINFOA si; PROCESS_INFORMATION pi; si.cb = sizeof(STARTUPINFO); GetStartupInfoA(&si); //si.hStdError = fp; //把创建进程的标准错误输出重定向到管道输入 //si.hStdOutput = fp; //把创建进程的标准输出重定向到管道输入 si.hStdError = houtputfile; si.hStdOutput = houtputfile; si.wShowWindow = SW_HIDE; si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; //关键步骤,CreateProcess函数参数意义请查阅MSDN if (!CreateProcessA(NULL, command, NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi)) { printf("err01\n"); //CloseHandle(hWrite); return; } //CloseHandle(hWrite); WaitForSingleObject(pi.hProcess, 120 * 1000); system("pause"); }
3、
4、
5、