命令行程序重定向输出到文本文件

在程序调用windows api启动命令行程序,并且重定向输出到文本文件
如,在cmd中输入 :

systeminfo > systeminfo.txt

下面是在C/C++程序中处理整个流程:

CString outputFile = "systeminfo.txt"; 
SECURITY_ATTRIBUTES sa = { sizeof(sa), NULL, TRUE };
HANDLE hFile = CreateFile(
    outputFile,
    GENERIC_WRITE,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    &sa,
    OPEN_ALWAYS /*| TRUNCATE_EXISTING*/,
    FILE_ATTRIBUTE_NORMAL,
    NULL);

if (hFile == INVALID_HANDLE_VALUE)
{
    //int err = GetLastError();
    return;
}

STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi = { 0 };
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;;
si.wShowWindow = SW_HIDE; //不显示创建的进程的窗口
si.hStdOutput = hFile;//重定向输出句柄为之前创建的文件句柄
TCHAR cmdline[] = TEXT("cmd.exe systeminfo");
if (CreateProcess(NULL, cmdline, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi))
{
    //等待打开的进程结束并关闭相关句柄
    WaitForSingleObject(pi.hProcess, INFINITE);
    ::CloseHandle(pi.hThread);
    ::CloseHandle(pi.hProcess);
}
else
{
    int err = GetLastError();
}
//关闭文件句柄
CloseHandle(hFile);

猜你喜欢

转载自blog.csdn.net/hsshh1988/article/details/80656281