使用Console.Read()确定文件结尾C#

时间:2012-01-14 15:19:06

标签: c# console

几天前,我问了一个关于如何检测N(N是未知)行的输入文件结尾的问题。

StringBuilder input = new StringBuilder();

int endOfFile = 0
while ((endOfFile = Console.Read()) != -1) {
    input.Append(((char)endOfFile).ToString());
    input.Append(Console.ReadLine());
}

我已经编辑了我的问题,但我想这与下面的一些提示相同。

5 个答案:

答案 0 :(得分:9)

@Jagannath基本上已经拥有了它,正如你所问的那样,除了一个小细节:该方法也适用于控制台,不涉及显式的StreamReader:

string line;
while ((line = Console.ReadLine()) != null)
{
    // TODO: Add processing
    Console.WriteLine(line);
}

如果您直接在控制台中输入而不是依赖从文件重定向的输入,请按 CTRL-Z F6 以触发“文件结束”在控制台输入上。在控制台内, F6 只是 CTRL-Z 的同义词。

请注意 CTRL-Z 这里是中断序列或信号,而不是输入字符。它会在屏幕上显示^Z。但是你不会在程序中收到CTRL-Z(U + 001A)字符。 CTRL-Z 序列被控制台捕获并导致输入流关闭,就像“文件已到达结束”一样。 不要在输入文件中插入CTRL-Z

为此目的使用CTRL-Z的起源至少可以追溯到CP / M操作系统(一个简短的娱乐故事本身,但一个超出范围)。

答案 1 :(得分:1)

这可以帮助循环遍历文件并检查文件结尾。

using (StreamReader sr = new StreamReader(@"test.txt"))
{
       string line;
       while ( (line = sr.ReadLine()) != null) 
       {
           Console.WriteLine(line);
       }
}

<强>更新

以下是msdn ReadLine method

的链接

答案 2 :(得分:1)

您是否打算使用shell将标准输入重定向到输入文件?

为什么不使用TextReader.Read()或TextReader.ReadLine()之类的东西? http://msdn.microsoft.com/en-us/library/system.io.textreader.aspx

答案 3 :(得分:1)

不太确定你为什么这么问,因为你接受上一个问题的答案是你在那里做的最简单的方法。您是否只是在寻找其他解决方案?

您应该查看Console.ReadKey的文档。在备注中它说:

  

即使使用SetIn方法将标准输入重定向到文件,ReadKey方法也会从键盘读取。

ReadKey将阻止,直到您按下键盘上的某个键。您无法使用ReadKey来检测重定向输入的结束。

答案 4 :(得分:0)

要从文件中读取输入,您可以使用

var text = File.ReadAllLines("path/to/file.txt");

如果您想要的是逐个字符地从控制台获取输入,您可以执行以下操作:

ConsoleKeyInfo keyInfo;
while ((keyInfo = Console.ReadKey()).Key != ConsoleKey.Escape)
{
}

您可以使用任何其他键替换ConsoleKey.Escape,或使用keyInfo.Modifiers检查CTRL + D,CTRL + C等组合键。

相关问题