process.StandardOutput извлекает только частичные данные - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь запустить exe-файл с помощью процесса в консольном приложении c # и построчно получать выводимый текст в файл 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 голосов
/ 17 декабря 2018
ProcessStartInfo sigCheckProcess = new ProcessStartInfo();
sigCheckProcess.FileName = "\\sigcheck64.exe";
sigCheckProcess.Arguments = "-a -h -i -l -s " ;
sigCheckProcess.RedirectStandardOutput = true;
sigCheckProcess.UseShellExecute = false;
sigCheckProcess.CreateNoWindow = true;

using (Process exeProcess = Process.Start(sigCheckProcess))
{
    exeProcess.WaitForExit();
    string line;
    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);
            }
        } 
    } 
}
0 голосов
/ 17 декабря 2018

Вы можете использовать это:

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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...