C++ Windows 管道写入文件到变量?
C++ Windows Pipe Writefile to a Variable?
我使用了 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;
}
相关文章:
- 通过多个头文件使用常量变量
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 无法通过头文件保存变量的值
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在 C++ 中将双精度变量写入二进制文件
- 如何使用文件中的文本,例如变量
- 定义C++新的环境变量并在 bat 文件中使用它
- 在头文件中定义变量不会出错
- 复制文件流C++静态变量
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- C++将文本从.txt文件解析为变量
- 从 C 中的变量获取文件的路径,C++
- 可以在 cpp 文件中C++定义为特殊符号的变量β
- 如何使用可视化代码和平台IO将环境变量注入CPP文件?
- C++ 静态成员变量 - 文件之间的访问
- 正在创建一个集中式变量文件
- 静态成员变量文件作用域