2009-11-12 56 views
2

看看下面的C#文件,我的问题的最简单可行的摄制:为什么CTRL-D不能以单声道发送EOF?

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); 
     } 
    } 
} 

当我建立这个下单并在控制台上运行它,一切正常,只是我无法发送EOF罚款。键入CTRL-D只是在命令行中输入一个奇怪的字符。我认为我在错误地检查EOF,但Console.InTextReader,它没有EndOfFile属性。我怎样才能解决这个问题?

回答

5

哪个版本的mono?我在2009年3月16日的r129444中修复了这个问题...当我按下Ctrl-D时,程序按预期运行。

更新:不错。我发现2.4.xy版本没有这个修复:-(它将会在即将推出的2.6版本中...对不起。 更新2: mono-2-4在2009-03分支-13。我错过了3天!

+1

我在v中看到这个问题ersion 2.4.2.3(tarball星期二10月6日15:35:40 MDT 2009),最近从mono-project.com下载 – 2009-11-12 04:50:04

+0

是的,我刚刚注意到,当他尝试使用安装Mono的系统而不是从源代码构建(trunk )一个。 – Gonzalo 2009-11-12 04:53:54

+0

我使用的是Ubuntu中的mono。 'mono --version'说1.9.1 ...在修复之前就已经完成了。该死。 – 2009-11-12 06:10:00

1

CTRL-D是unix风格的文件结尾...因为Mono派生自Microsoft领域它可能使用CTRL-Z吗? (我没有安装Mono,所以我在黑暗中拍摄)。

+2

Ctrl-D是EOT,Ctrl-Z是EOF。至少在sh和bash中用Ctrl-Z来停止在前台运行的进程... – Gonzalo 2009-11-12 04:42:48

+0

嗯,我从来没有做过这样的区分...在每个操作系统上结束输入只是D(in * nix)或者Z(在DOS和Win中),这个链接似乎认为CTRL-D也是* nix中的EOF:http:// www.uwyo.edu/askit/displaydoc.asp?askitdocid=259&parentid=1 – Godeke 2009-11-12 05:18:23

+0

这些是stty变量名称,而不是ASCII。对于处理文本的终端来说,考虑EOT == EOF并将其视为终点它的输入。 – Gonzalo 2009-11-13 21:58:17