我想制作一个读取流输入的控制台应用程序(c#3.5)。
像这样:
dir> MyApplication.exe
应用程序读取每一行并向控制台输出内容。
走哪条路?
由于
答案 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)。