【发布时间】:2021-05-20 15:00:17
【问题描述】:
我正在尝试使用 Process 方法调用 exe 应用程序,我需要传递 pdf 字节流。在使用标准输入时,我正在尝试这样的事情:
var stream = myexe.StandardInput;
try
{
stream.Write(content);
}
finally
{
stream.Close();
}
另一方面,我正在尝试阅读:
var bytesInStream = new byte[10*1024];
var input = Console.OpenStandardInput();
var temp = input.Read(bytesInStream, 0, (int)bytesInStream.Length);
【问题讨论】:
-
问题出在哪里?
-
Process.StandardInput是一个 StreamWriter,它使用一种编码将数据转换为二进制。在这种情况下,您不希望这样。尝试使用Process.StandardInput.BaseStream.Write(pdf, 0, pdf.Length)。 -
input.Read只读取一个缓冲区。您可以使用Stream.CopyTo将传入的字节复制到 MemoryStream 或 FileStream。您应该使用OpenStandardInpu()或StandardInput.BaseStream来获取进程的输入流而不是 StreamWriter -
另外请注意,您需要一种方法让子进程知道它何时读取了正确的字节数。一种方法是在写入所有数据后关闭流,这将导致子进程在读取所有数据后达到文件结束条件。另一种方法是在流中添加一些元数据,告诉子进程要读取多少字节。
-
StdIn 是文本流,特别不适用于 PDF(二进制格式)。请改用文件。
标签: c# .net console-application