几天前,我问了一个关于如何检测N(N是未知)行的输入文件结尾的问题。
StringBuilder input = new StringBuilder();
int endOfFile = 0
while ((endOfFile = Console.Read()) != -1) {
input.Append(((char)endOfFile).ToString());
input.Append(Console.ReadLine());
}
我已经编辑了我的问题,但我想这与下面的一些提示相同。
答案 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等组合键。