捕获控制台流输入

时间:2010-10-06 15:00:41

标签: c# input console stream

我想制作一个读取流输入的控制台应用程序(c#3.5)。

像这样:

dir> MyApplication.exe

应用程序读取每一行并向控制台输出内容。

走哪条路?

由于

4 个答案:

答案 0 :(得分:4)

您必须使用管道(|)将dir的输出传输到应用程序中。您在示例中使用的重定向(>)将中继文件Application.exe并在其中写入dir命令的输出,从而破坏您的应用程序。

要从控制台读取数据,您必须使用Console.ReadLine方法,例如:

using System;

public class Example
{
   public static void Main()
   {
      string line;
      do { 
         line = Console.ReadLine();
         if (line != null) 
            Console.WriteLine("Something.... " + line);
      } while (line != null);   
   }
}

答案 1 :(得分:3)

使用控制台。Read / ReadLine从标准输入流中读取。

或者,您可以通过Console.In直接访问流(作为TextReader)。

答案 2 :(得分:1)

在窗口应用程序或任何其他类型的集成中添加的做法如下:

static public void test()
{
    System.Diagnostics.Process cmd = new System.Diagnostics.Process();

    cmd.StartInfo.FileName = "cmd.exe";
    cmd.StartInfo.RedirectStandardInput = true;
    cmd.StartInfo.RedirectStandardOutput = true;
    cmd.StartInfo.CreateNoWindow = true;
    cmd.StartInfo.UseShellExecute = false;

    cmd.Start();

    /* execute "dir" */

    cmd.StandardInput.WriteLine("dir");
    cmd.StandardInput.Flush();
    cmd.StandardInput.Close();
    string line;
    int i = 0;

    do
    {
        line = cmd.StandardOutput.ReadLine();
        i++;
        if (line != null)
            Console.WriteLine("Line " +i.ToString()+" -- "+ line);
    } while (line != null);

}

static void Main(string[] args)
{
    test();
}

答案 3 :(得分:0)

这实际上取决于您想要做什么以及您希望使用哪种类型的流。据推测,您正在谈论阅读文本流(基于“应用程序读取每一行......”)。因此,您可以这样做:

    using (System.IO.StreamReader sr = new System.IO.StreamReader(inputStream))
    {
        string line;
        while (!string.IsNullOrEmpty(line = sr.ReadLine()))
        {
            // do whatever you need to with the line
        }
    }

您的inputStream将派生类型为System.IO.Stream(例如FileStream)。