107 votes

Comment enregistrer la sortie de Console.WriteLine dans un fichier texte ?

J'ai un programme qui affiche divers résultats sur une console de ligne de commande.

Comment puis-je sauvegarder la sortie dans un fichier texte en utilisant un StreamReader ou d'autres techniques ?

System.Collections.Generic.IEnumerable<String> lines = File.ReadAllLines(@"C:\Test\ntfs8.txt");

foreach (String r in lines.Skip(1))
{
    String[] token = r.Split(',');
    String[] datetime = token[0].Split(' ');
    String timeText = datetime[4];
    String actions = token[2];
    Console.WriteLine("The time for this array is: " + timeText);
    Console.WriteLine(token[7]);
    Console.WriteLine(actions);
    MacActions(actions);
    x = 1;
    Console.WriteLine("================================================");
}

if (x == 2)
{
    Console.WriteLine("The selected time does not exist within the log files!");
}

System.IO.StreamReader reader = ;
string sRes = reader.ReadToEnd();
StreamWriter SW;
SW = File.CreateText("C:\\temp\\test.bodyfile");
SW.WriteLine(sRes);
SW.Close();
Console.WriteLine("File Created");
reader.Close();

0 votes

164voto

astander Points 83138

Essayez cet exemple tiré de cet article - Démonstration de la redirection de la sortie de la Console vers un fichier

using System;
using System.IO;

static public void Main ()
{
    FileStream ostrm;
    StreamWriter writer;
    TextWriter oldOut = Console.Out;
    try
    {
        ostrm = new FileStream ("./Redirect.txt", FileMode.OpenOrCreate, FileAccess.Write);
        writer = new StreamWriter (ostrm);
    }
    catch (Exception e)
    {
        Console.WriteLine ("Cannot open Redirect.txt for writing");
        Console.WriteLine (e.Message);
        return;
    }
    Console.SetOut (writer);
    Console.WriteLine ("This is a line of text");
    Console.WriteLine ("Everything written to Console.Write() or");
    Console.WriteLine ("Console.WriteLine() will be written to a file");
    Console.SetOut (oldOut);
    writer.Close();
    ostrm.Close();
    Console.WriteLine ("Done");
}

1 votes

J'ai ajouté ceci à mon modèle de console de test standard.

0 votes

Est-ce possible uniquement en utilisant app.config, et non pas de manière programmatique, section system.diagnostics ? Un exemple ?

0 votes

N'est-il pas préférable d'utiliser en utilisant ?

61voto

pika81 Points 454

Essayez si cela fonctionne :

FileStream filestream = new FileStream("out.txt", FileMode.Create);
var streamwriter = new StreamWriter(filestream);
streamwriter.AutoFlush = true;
Console.SetOut(streamwriter);
Console.SetError(streamwriter);

6 votes

Excellente réponse - notez ceci redirige vers la sortie de la console, de sorte que vous n'obteniez que la journalisation. Vous pouvez également utiliser FileMode.Append pour conserver les journaux précédents.

4 votes

Console.SetOut(System.IO.TextWriter.Null) si vous voulez désactiver le journal.

26voto

Pour la question :

Comment enregistrer les sorties de Console.Writeline dans un fichier texte ?

J'utiliserais Console.SetOut comme d'autres l'ont mentionné.


Cependant, on dirait plutôt que vous suivez le déroulement de votre programme. J'envisagerais d'utiliser Debug o Trace pour garder la trace de l'état du programme.

Il fonctionne de manière similaire à la console, sauf que vous avez plus de contrôle sur vos entrées, telles que WriteLineIf .

Debug ne fonctionnera qu'en mode débogage, alors que l'option Trace fonctionnera à la fois en mode débogage et en mode libération.

Ils permettent tous deux l'utilisation de récepteurs tels que des fichiers de sortie ou la console.

TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(tr1);

TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));
Debug.Listeners.Add(tr2);

- http://support.microsoft.com/kb/815788

19voto

L-Three Points 4465

Voulez-vous écrire du code pour cela ou simplement utiliser la fonctionnalité de ligne de commande 'redirection de commande' comme suit :

app.exe >> output.txt

comme démontré ici : http://discomoose.org/2006/05/01/output-redirection-to-a-file-from-the-Windows-command-line/ (Archivé à archive.org )

EDIT : lien mort, voici un autre exemple : http://pcsupport.about.com/od/commandlinereference/a/redirect-command-output-to-file.htm

1 votes

Cette solution me convient mieux car j'ai trouvé que mon résultat était tronqué en utilisant la solution TextWriter. Si vous voulez un nouveau lien, cherchez Command Redirection par exemple. technet.microsoft.com/fr/us/library/bb490982.aspx

0 votes

L'utilisation de la fonction de redirection dans les fichiers bat/cmd, par exemple, entraîne la conversion de la sortie en codepage 850.

6voto

WhoIsNinja Points 1024

Créer une classe Logger(code ci-dessous), remplacer Console.WriteLine par Logger.Out. A la fin écrivez dans un fichier la chaîne Log

public static class Logger
{        
     public static StringBuilder LogString = new StringBuilder(); 
     public static void Out(string str)
     {
         Console.WriteLine(str);
         LogString.Append(str).Append(Environment.NewLine);
     }
 }

0 votes

C'est exactement ce que je recherchais.

0 votes

On ne peut pas le faire pour les bibliothèques déjà compilées qui impriment directement dans la console.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X