gpt4 book ai didi

c# - 从 Process StandardOutput 获取值

转载 作者:行者123 更新时间:2023-11-30 19:17:56 24 4
gpt4 key购买 nike

我正在尝试获取输出以显示我机器上当前打开的文档,但无论如何它都返回 NULL。

StringCollection values = new StringCollection();
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "openfiles.exe",
Arguments = "/query /FO CSV /v",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
}
};
proc.Start();
while (!proc.StandardOutput.EndOfStream)
{
string line = proc.StandardOutput.ReadLine();
values.Add(line);
}
foreach (string sline in values)
MessageBox.Show(sline);

编辑:

在进一步审查期间,我发现我遇到了异常问题。在我的诊断运行期间,我得到以下信息:Proc.BasePriority 引发 System.InvalidOperationException 类型的异常

编辑:

试图拉取代码为:

string val = proc.StandardOutput.ReadToEnd();
MessageBox.Show(val);

返回时也是一个 NULL 值,即使在 proc.start(); 之后 Proc 仍然有错误。

最佳答案

您必须同时读取标准输出和标准错误流。这是因为您无法从同一个线程中读取它们。

要实现这一点,您必须使用 eventhandlers将在单独的线程上调用。

将代码编译为 anycpu,因为 openfiles 有 32 位和 64 位变体。如果架构不匹配,它可能找不到可执行文件。

从错误流中读取的行以 ! > 因此它们在输出中脱颖而出。

    StringCollection values = new StringCollection();
var proc = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "openfiles.exe",
Arguments = "/query /FO CSV /v",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = false
}
};
proc.Start();

proc.OutputDataReceived += (s,e) => {
lock (values)
{
values.Add(e.Data);
}
};
proc.ErrorDataReceived += (s,e) => {
lock (values)
{
values.Add("! > " + e.Data);
}
};

proc.BeginErrorReadLine();
proc.BeginOutputReadLine();

proc.WaitForExit();
foreach (string sline in values)
MessageBox.Show(sline);

关于c# - 从 Process StandardOutput 获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15032643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com