2009-11-12 4 views
2

Prenez le fichier C# suivant, le plus simple repro possible de mon problème:Pourquoi CTRL-D n'envoie-t-il pas EOF en mono?

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

Lorsque je construis cette sous mono et l'exécuter sur la console, tout fonctionne bien, sauf que je ne peux pas envoyer EOF. Taper CTRL-D met juste un caractère étrange sur la ligne de commande. Je pense que je vérifie EOF dans le mauvais sens, mais Console.In est un TextReader, qui n'a pas la propriété EndOfFile. Comment puis-je réparer cela?

Répondre

5

Quelle version de mono? J'ai corrigé ce problème dans r129444 en 2009-03-16 ... Votre programme fonctionne comme prévu lorsque j'appuie sur Ctrl-D.

Mise à jour: Nice. J'ai découvert que les versions 2.4.xy n'ont pas le correctif :-(. Il sera dans la prochaine version 2.6 ... Désolé à ce sujet Mise à jour 2: mono-2-4 a été ramifié sur 2009-03 -13 Je l'ai manqué de 3 jours

+1

Je vois ce problème dans v ersion 2.4.2.3 (tarball mar Oct 6 15:35:40 MDT 2009), téléchargé récemment de mono-project.com –

+0

Ouais, je viens de remarquer que lors de son essai avec le système installé Mono au lieu de l'construit à partir de sources (tronc) un. – Gonzalo

+0

J'utilise le mono qui est dans Ubuntu principal. 'mono --version' dit 1.9.1 ... si bien avant votre correction. Zut. –

1

CTRL-D est la fin de fichier de style unix ... parce que Mono dérive du domaine de Microsoft utilise-t-il peut-être CTRL-Z? (Mono n'est pas installé, donc je prends une photo dans le noir ici).

+2

Ctrl-D est EOT et Ctrl-Z est EOF Ctrl-Z dans au moins sh et bash est utilisé pour arrêter un processus en cours d'exécution en premier plan ... – Gonzalo

+0

Hmmm, I jamais fait cette distinction ... terminant l'entrée sur chaque système d'exploitation était juste D (en * nix) ou Z (en DOS et Win) .Ce lien semble penser que CTRL-D est aussi EOF * nix: http: // www.uwyo.edu/askit/displaydoc.asp?askitdocid=259&parentid=1 – Godeke

+0

Ce sont des noms de variables stty, pas ASCII Il est logique pour un terminal qui traite du texte de considérer EOT == EOF et de le traiter comme la fin de son entrée – Gonzalo