Как написать текст консольного приложения в текстовом формате - PullRequest
0 голосов
/ 21 сентября 2018

Я создаю инструмент, который использует procdump для выгрузки процесса, затем использует Strings v2.53 для преобразования дампа в реальные строки, после преобразования дампа я пытаюсь записать все строки, которые отображаются в консольном приложении, в a.текст.

Понятия не имею, что я делаю неправильно, и я попробовал все посты на форуме, которые я видел, как это сделать, и я просто не могу это сделать.

Вот мой код

        string path2 = @"C:\Void\Dump\Dump.txt";


        Process p = new Process();
        ProcessStartInfo info = new ProcessStartInfo();
        info.FileName = "cmd.exe";
        info.RedirectStandardInput = true;
        info.UseShellExecute = false;

        p.StartInfo = info;
        p.Start();
        StreamWriter sw = p.StandardInput;
        using (sw)
        {
            if (sw.BaseStream.CanWrite)
            {
                sw.WriteLine(@"cd C:\Void\Dump");
                sw.WriteLine(@"strings -s");

                System.IO.StreamWriter stream = new System.IO.StreamWriter(path2);

                sw.AutoFlush = true;

                Console.SetOut(stream);

            }
        }

1 Ответ

0 голосов
/ 21 сентября 2018

Я бы построил это так, чтобы вы записывали в текстовый файл во время записи в вывод консоли.

File.WriteAllText(fileDirectoryPath, textData);//is the simplest way you can write to a file

Вам также необходимо преобразовать поток в текст с помощью средства чтения потоков перед отправкой в ​​параметр textData объекта WriteAllText.См. Пример ниже:

StreamReader reader = new StreamReader(stream);
string text = reader.ReadToEnd();
File.WriteAllText("pathwayToDirectory", text);

А вот код, интегрированный в ваше решение.Примечание. Я предполагаю, что вы помещаете эти текстовые данные в файл дампа:

   string path2 = @"C:\Void\Dump\Dump.txt";


    Process p = new Process();
    ProcessStartInfo info = new ProcessStartInfo();
    info.FileName = "cmd.exe";
    info.RedirectStandardInput = true;
    info.UseShellExecute = false;

    p.StartInfo = info;
    p.Start();
    StreamWriter sw = p.StandardInput;
    using (sw)
    {
        if (sw.BaseStream.CanWrite)
        {
            sw.WriteLine(@"cd C:\Void\Dump");
            sw.WriteLine(@"strings -s");

            System.IO.StreamWriter stream = new System.IO.StreamWriter(path2);

              StreamReader reader = new StreamReader(path2);//Fixed this to have the right value
            string text = reader.ReadToEnd();//convert stream to text
            File.WriteAllText(path2, text);

            Console.SetOut(stream);
            sw.AutoFlush = true;

        }
    }
...