【问题标题】:Use BeginOutputReadLine when the process output newline or return当进程输出换行符或返回时使用 BeginOutputReadLine
【发布时间】:2011-02-23 15:31:41
【问题描述】:

我使用 Process() 来执行一个名为“test.exe”的外部文件。

“test.exe”只打印一个字符串。 "abc \n \r xyz\n"

我的目标是获取字符串并将每个字节转换为相应的 ASCII 码。

也就是说,我希望我的 c# 控制台中的输出如下所示, 97 98 99 32 10 32 13 32 120 121 122 10

但是当我使用 BeginOutputReadLine 来获取 test.exe 的输出时,\n 和 \r 被条带化了。

结果,我只得到了 97 98 99 32 32 32 120 121 122

最后,我不想使用 Read、ReadLine 和 ReadToEnd 等同步方式。 有什么方法可以得到我想要的吗??

谢谢!

其实我创建了一个backgroundWorker来处理外部进程test.exe 我有一个 proc_DataReceived 和 backgroundWorker_Build_ProgressChanged...

相关代码如下
http://codepad.org/Gmq1XqXb
全部代码如下
http://codepad.org/k7VpWynu

(我是 stackoverflow 的新手。在了解如何在此处格式化代码之前,我将代码粘贴到 codepad.org。)

【问题讨论】:

  • 您好,如果您完全省略对 BeginOutputReadLine 的调用,它是如何工作的?无论如何,您应该能够捕获输出,因为您已经为 OutputDataReceived 设置了一个事件处理程序,那么它的行为如何?
  • 我有相关的函数来处理这个问题,只是把它们粘贴在这里。我可以使用 backgroundworker 并获取 test.exe 的输出,但我不知道如何获取包含 \n 和 \r 的 test.exe 的“全部”输出。

标签: c# process newline io-redirection


【解决方案1】:

如果您使用 BeginOutputReadLine,字符串将不包含“行尾”字符(或其中一些)。

请参阅Capture output from unrelated process 了解捕获另一个进程输出的另一种方法。这在您的情况下会更好,因为您可以逐个字符地读取流。

【讨论】:

  • 点击链接会导致错误的解决方案,如果我遗漏了什么,您能澄清一下吗?
猜你喜欢
  • 2014-10-24
  • 2011-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
相关资源
最近更新 更多