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

nen*_*ito 3 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());
}
Run Code Online (Sandbox Code Playgroud)

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

Eur*_*lli 9

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

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

如果您直接在控制台中键入而不是依赖从文件重定向的输入,请按CTRL-ZF6在控制台输入上触发"文件结束".在控制台内部,F6只是一个同义词CTRL-Z.

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

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