2010-10-06 28 views
4

Je voudrais créer une application console (C# 3.5) qui lit l'entrée du flux.Saisir l'entrée du flux de la console

Comme ceci:

dir> MyApplication.exe

L'application lit chaque ligne et les sorties quelque chose à la console.

Quel chemin à parcourir?

Merci

+0

Qu'est-ce que vous exactement des difficultés avec? – Oded

Répondre

4

Vous devez utiliser un tuyau (|) pour acheminer la sortie du dir dans l'application. Rediriger (>) que vous avez utilisé dans votre exemple troncera le fichier Application.exe et écrira la sortie de la commande dir là, corrompant ainsi votre application.

Pour lire les données à partir de la console, vous devez utiliser la méthode Console.ReadLine, par exemple:

using System; 

public class Example 
{ 
    public static void Main() 
    { 
     string line; 
     do { 
     line = Console.ReadLine(); 
     if (line != null) 
      Console.WriteLine("Something.... " + line); 
     } while (line != null); 
    } 
} 
+0

Arrrggg ... un tuyau au lieu d'une redirection ... Vous avez la clé ... – vIceBerg

3

Utilisez la console. Read/ReadLine pour lire à partir du flux d'entrée standard.

Vous pouvez également obtenir un accès direct au flux (en tant que TextReader) via Console.In.

0

Cela dépend vraiment de ce que vous voulez faire et quel type de flux que vous souhaitez travailler avec. Vraisemblablement, vous parlez de lire un flux de texte (basé sur "l'application lit chaque ligne ..."). Par conséquent, vous pouvez faire quelque chose comme ceci:

using (System.IO.StreamReader sr = new System.IO.StreamReader(inputStream)) 
    { 
     string line; 
     while (!string.IsNullOrEmpty(line = sr.ReadLine())) 
     { 
      // do whatever you need to with the line 
     } 
    } 

Votre fluxEntrée dériverait de type System.IO.Stream (comme FileStream, par exemple).

1

Une pratique à ajouter dans votre application de fenêtre ou tout autre type d'intégration est comme ci-dessous:

static public void test() 
{ 
    System.Diagnostics.Process cmd = new System.Diagnostics.Process(); 

    cmd.StartInfo.FileName = "cmd.exe"; 
    cmd.StartInfo.RedirectStandardInput = true; 
    cmd.StartInfo.RedirectStandardOutput = true; 
    cmd.StartInfo.CreateNoWindow = true; 
    cmd.StartInfo.UseShellExecute = false; 

    cmd.Start(); 

    /* execute "dir" */ 

    cmd.StandardInput.WriteLine("dir"); 
    cmd.StandardInput.Flush(); 
    cmd.StandardInput.Close(); 
    string line; 
    int i = 0; 

    do 
    { 
     line = cmd.StandardOutput.ReadLine(); 
     i++; 
     if (line != null) 
      Console.WriteLine("Line " +i.ToString()+" -- "+ line); 
    } while (line != null); 

} 

static void Main(string[] args) 
{ 
    test(); 
}