C# 为什么';t CTRL-D以单声道发送EOF?
以下面的C#文件为例,这是对我的问题最简单的可能的再现:C# 为什么';t CTRL-D以单声道发送EOF?,c#,mono,eof,C#,Mono,Eof,以下面的C#文件为例,这是对我的问题最简单的可能的再现: using System; using System.IO; public static class Test { public static void Main(string[] args) { string line; while ((line = Console.In.ReadLine()) != null) { Console.Out.Wri
using System;
using System.IO;
public static class Test
{
public static void Main(string[] args)
{
string line;
while ((line = Console.In.ReadLine()) != null)
{
Console.Out.WriteLine(line);
}
}
}
当我在mono下构建它并在控制台上运行它时,除了不能发送EOF之外,一切都正常。键入CTRL-D只会在命令行中输入一个奇怪的字符。我想我检查EOF的方法是错误的,但是
控制台中的是一个文本阅读器
,它没有EndOfFile
属性。如何修复此问题?CTRL-D是unix风格的文件结尾。。。由于Mono源于Microsoft领域,它是否可能使用CTRL-Z?(我没有安装Mono,所以我在这里摸黑拍摄)。哪个版本的Mono?我在2009年03月16日解决了这个问题。。。当我按Ctrl-D时,您的程序按预期运行
更新:很好。我发现2.4.x.y版本没有修正:-(。它将出现在即将发布的2.6版本中…对此感到抱歉。
更新2:mono-2-4在2009-03-13被分支。我错过了3天!Ctrl-D是EOT,Ctrl-Z是EOF。Ctrl-Z至少在sh和bash中用于停止前台运行的进程…嗯,我从来没有做过区分…每个操作系统上的结束输入只有D(在*nix中)或Z(在DOS和Win中)这个链接似乎认为CTRL D也在*NIX中是EOF:那些是STATY变量名,而不是ASCII。对于处理文本的终端来说,考虑EOT=EOF并把它当作其输入的末尾是有意义的。我在2.4.2.3版中看到这个问题(TaulBoE 10月6日15:35:40MDT 2009)。,最近从mono-project.com下载。是的,我刚刚注意到,当我用系统安装的mono而不是从源代码(主干)构建的mono进行测试时。我使用的是Ubuntu main中的mono。mono--版本
说1.9.1…比你的修复版本早得多。该死。看起来你也有一个旧的Ubuntu;-)我希望这个bug可以移植到mono-2-4;-)