C++ Windows 管道写入文件到变量?

C++ Windows Pipe Writefile to a Variable?

本文关键字:变量 文件 Windows 管道 C++      更新时间:2023-10-16

我使用了 msdn 中的"使用重定向输入和输出创建子进程"教程。
链接: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx

一切正常,父进程显示完全正确。但是,我想从管道读取并以变量类型写入输出,而不是从管道读取它并将其写入父STD_OUTPUT_HANDLE。

我的意思是:

void ReadFromPipe(void) 
// Read output from the child process's pipe for STDOUT
// and write to the parent process's pipe for STDOUT. 
// Stop when there is no more data. 
{ 
DWORD dwRead, dwWritten; 
CHAR chBuf[BUFSIZE]; 
BOOL bSuccess = FALSE;
HANDLE hParentStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
for (;;) 
{ 
bSuccess = ReadFile( g_hChildStd_OUT_Rd, chBuf, BUFSIZE, &dwRead, NULL);
if( ! bSuccess || dwRead == 0 ) break; 
bSuccess = WriteFile(hParentStdOut, chBuf, 
dwRead, &dwWritten, NULL);
if (! bSuccess ) break; 
} 
} 

我设法在 Writefile 函数之后获得了 chBuf,并试图从中构建一个字符串,但它包含我不想在我的字符串中出现的重复项和字符。所以我的字符串包含的字符比父控制台输出多得多。

我的解决方法是将输出保存到一个文件,然后将其流式传输到变量,但该解决方案很糟糕,因为如果您运行我的应用程序的两个实例,我必须管理它以不覆盖其他文件,依此类推它变得越来越复杂,我想要一个更干净的解决方案

你能帮我吗?

我设法在 Writefile 函数之后获取了 chBuf,并尝试从中构建一个字符串,但它包含我不想在我的字符串中拥有的重复项和字符。所以我的字符串包含的字符比父控制台输出多得多。

最有可能的是,您正在构建不考虑dwRead的字符串 - 即,您总是假设已读取完整的缓冲区 - 或类似的东西。尽管如此,从您正在读取的数据中构建std::string实际上非常简单:

std::string ReadFromPipe(void) { 
std::string ret;
DWORD dwRead;
CHAR chBuf[BUFSIZE]; 
BOOL bSuccess = FALSE;
for (;;) { 
bSuccess = ReadFile( g_hChildStd_OUT_Rd, chBuf, BUFSIZE, &dwRead, NULL);
if( ! bSuccess || dwRead == 0 ) break; 
ret.append(chBuf, dwRead);
}
return ret;
}