none
Как перенаправить стандартный поток ввода/вывода? RRS feed

  • Общие обсуждения

  • Пример:

        static void Main(string[] args)
        {
          StreamReader outputReader = null;
          StreamReader errorReader = null;
    
          try 
          {
            ProcessStartInfo psi = new ProcessStartInfo(@"c:\Program.exe", "a b c");
    
            psi.ErrorDialog = false;
            psi.UseShellExecute = false;
            psi.RedirectStandardError = true;
            psi.RedirectStandardInput = true;
            psi.RedirectStandardOutput = true;
    
            Process proc = new Process();
            proc.StartInfo = psi;
            bool started = proc.Start();
            if (started)
            {
              outputReader = proc.StandardOutput;
              errorReader = proc.StandardError;
              proc.WaitForExit();
    
              string displayText = "Output" + Environment.NewLine;
              displayText += outputReader.ReadToEnd();
              displayText += Environment.NewLine + "Error" + Environment.NewLine;
              displayText += errorReader.ReadToEnd();
    
              Console.WriteLine(displayText);
            }
          }
          catch (Exception e)
          {
            Console.WriteLine(e.Message);
          }
          finally
          {
            if(outputReader != null)
            {
              outputReader.Close();
            }
            if(errorReader != null)
            {
              errorReader.Close();
            }
    
    

    Допустим приложение A имеет 2 параметра, вводимых с клавиатуры, приложение B запускает приложение А и перенаправляет стандарнтый поток ввода:

    Код для приложения A:

    static void Main(string[] args)
        {
          string input1 = Console.ReadLine();
          string input2 = Console.ReadLine();
    
          Console.WriteLine(input1);
          Console.WriteLine(input2); 
        }
    
    

    Код для приложения B:

    static void Main(string[] args)
        {
          ProcessStartInfo psi = new ProcessStartInfo();
          psi.FileName = @"c:\applicationA.exe";
          psi.UseShellExecute = false;
          psi.RedirectStandardInput = true;
          Process proc = new Process();
          proc.StartInfo = psi;
          proc.Start();
    
          proc.StandardInput.WriteLine(10);
          proc.StandardInput.WriteLine(20);
        }
    
    

    Также смотрите статью How to redirect Standard Input/Output of an application

     


    Для связи [mail]
    1 февраля 2011 г. 14:42