Rediriger les flux d’entrées et de sorties de la console


Voici comment faire pour fournir un fichier en entrée a un programme et rediriger la sortie.
Voici ce que fait notre programme :

    string input = "";
    while ((input = Console.ReadLine()) != null) Console.WriteLine(input);

Il lit une entrée et la réécrit.

La classe console à deux attributs, in et out. Ces deux attributs sont des TextWritter/Reader. Ils peuvent être définis avec les méthodes Set associée (SetIn() et SetOut())
Nous allons maintenant faire en sorte de passer le nom d’un fichier en argument pour l’input. La sortie sera ensuite écrite dans un fichier du même nom, suffixé par « .out ».

TextReader oldtr = Console.In;
TextWriter oldtw = Console.Out;

try
{
    TextReader tr = new StreamReader(args[0]);
    TextWriter tw = new StreamWriter((args[0] + ".out"));

    Console.SetIn(tr);
    Console.SetOut(tw);

    string input = "";
    while ((input = Console.ReadLine()) != null) Console.WriteLine(input);

    tw.Flush();
}
catch (Exception e)
{
    Console.SetIn(oldtr);
    Console.SetOut(oldtw);
    Console.WriteLine(e.Message);
}

On sauvegarde tout d’abord nos anciens stream. Ensuite dans un try/catch on exécute la lecture du fichier. Les exceptions sont très mal gérées, mais ce n’est pas le but de l’article. La sauvegarde nous permet de reprendre la main sur les stream originaux (clavier/ecran) au cas où.
Notre boucle s’exécutera jusqu’au EOF (ReadLine() retournera null). Ensuite on flush le stream afin de tout commiter dans le fichier défini dans le constructeur du StreamWritter. Il n’est pas nécéssaire d’appeler Close(). La console le fera pour vous a sa fermeture. (Les close() s’executerons sur les propriétées in/out que l’on à défini)
Voilà, maintenant vous pouvez « automatiser via des scripts » vos applications consoles en dotnet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s