Как сохранить консоль.Строку вывода в текстовый файл?


У меня есть программа, которая выводит различные результаты на консоль командной строки.

Как сохранить выходные данные в текстовый файл с помощью Stream Reader или других методов?

System.Collections.Generic.IEnumerable<String> lines = File.ReadAllLines(@"C:Testntfs8.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:temptest.bodyfile");
SW.WriteLine(sRes);
SW.Close();
Console.WriteLine("File Created");
reader.Close();
7 82
c#

7 ответов:

попробуйте этот пример из этой статьи - демонстрирует перенаправление вывода консоли в файл

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

попробовать, если это работает:

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

на вопрос:

как сохранить консоль.Строку Выводит в текстовый файл?

Я хотел бы использовать Console.SetOut Как отметили другие.


тем не менее, это больше похоже на то, что вы отслеживаете свой поток программы. Я бы рассмотрел использование Debug или Trace для отслеживания состояния программы.

он работает аналогично консоли, за исключением того, что у вас есть больше контроля над вашим входом, таким как WriteLineIf.

Debug будет работать только в режиме отладки, где, как Trace будет работать в режиме отладки или релиза.

они оба позволяют для слушателей, таких как выходные файлы или консоль.

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

вы хотите написать код для этого или просто использовать функцию командной строки "перенаправление команд" следующим образом:

приложение.exe > > вывод.txt

как показано здесь: http://discomoose.org/2006/05/01/output-redirection-to-a-file-from-the-windows-command-line/ (Архивировано в archive.org)

EDIT: ссылка мертва, вот еще один пример: http://pcsupport.about.com/od/commandlinereference/a/redirect-command-output-to-file.htm

использовать Console.SetOut для перенаправления на TextWriter как описано здесь: http://msdn.microsoft.com/en-us/library/system.console.setout.aspx

создать регистратор классов (код ниже), заменить консоль.WriteLine с регистратором.Из. В конце запишите в файл строку 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);
     }
 }

использование только конфигурации в вашем приложении.config:

    <system.diagnostics> 
        <trace autoflush="true" indentsize="4"> 
              <listeners> 

              <add name="consoleListener" type="System.Diagnostics.ConsoleTraceListener"/>

            <!--
            <add name="logListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TextWriterOutput.log" /> 
            <add name="EventLogListener" type="System.Diagnostics.EventLogTraceListener" initializeData="MyEventLog"/>
             -->

             <!--
              Remove the Default listener to avoid duplicate messages
              being sent to the debugger for display
             -->
             <remove name="Default" />

             </listeners> 
        </trace> 
  </system.diagnostics>

для тестирования можно использовать DebugView перед запуском программы, то мы можем легко просмотреть все сообщения журнала.

References:
http://blogs.msdn.com/b/jjameson/archive/2009/06/18/configuring-logging-in-a-console-application.aspx http://www.thejoyofcode.com/from_zero_to_logging_with_system_diagnostics_in_15_minutes.aspx
Redirect Трассировка вывода на консоль
проблема перенаправления отладочного вывода в файл с помощью трассировки listener
https://ukadcdiagnostics.codeplex.com/
http://geekswithblogs.net/theunstablemind/archive/2009/09/09/adventures-in-system.diagnostics.aspx