process.StandardOutput仅检索部分数据

时间:2018-12-13 22:18:04

标签: c# process

我正在尝试使用c#控制台应用程序中的进程运行exe,并将输出逐行写入TXT文件。这应该在所有子文件夹文件中递归运行。

当我使用文件较少的文件夹运行时,这非常有用。但是,当在具有大量文件列表的顶级文件夹中或在驱动器级别(例如D:\或E:\)运行此文件时,它不会提供完整的输出,并且会在其完整输出之间停下来。控制台输出也是如此。

试图启用Standarderror并输出该错误,但是却没有得到任何错误。请建议为什么要用部分数据来完成而不是在整个列表中运行?

Process sigCheckProcess = new Process();
sigCheckProcess.StartInfo.FileName = sigcheckdir + "\\sigcheck64.exe";
sigCheckProcess.StartInfo.Arguments = "-a -h -i -l -s " + dir;
sigCheckProcess.StartInfo.RedirectStandardOutput = true;
sigCheckProcess.StartInfo.UseShellExecute = false;
sigCheckProcess.StartInfo.CreateNoWindow = true;
sigCheckProcess.Start();

using (StreamWriter streamWriter = File.CreateText(@"D:\Sigcheckoutput.txt"))
{
    using (StreamReader streamReader = sigCheckProcess.StandardOutput)
    {
        while (!streamReader.EndOfStream)
        {
            var content = sigCheckProcess.StandardOutput.ReadLine();
            streamWriter.WriteLine(content);
        }
    }
}
sigCheckProcess.WaitForExit();

2 个答案:

答案 0 :(得分:0)

java.lang.ClassCastException: com.package.MyClass$addProduct$1 cannot be cast to kotlin.jvm.functions.Function1

答案 1 :(得分:-1)

您可以使用此:

Process.Start(sigCheckProcess).WaitForExit();

using (System.IO.StreamWriter writer = new System.IO.StreamWriter("output.txt")) // output txt file.
{
    using (System.IO.StreamReader reader = new System.IO.StreamReader(Path.Combine(@"c:\temp\", "test.txt")))  // replaces sigCheckProcess.StandardOutput
    {
        while (!reader.EndOfStream)
        {
            line = reader.ReadLine();
            writer.WriteLine(line);
        }
    }
}