Как сохранить консоль.Строку вывода в текстовый файл?
У меня есть программа, которая выводит различные результаты на консоль командной строки.
Как сохранить выходные данные в текстовый файл с помощью 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 ответов:
попробуйте этот пример из этой статьи - демонстрирует перенаправление вывода консоли в файл
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);
вы хотите написать код для этого или просто использовать функцию командной строки "перенаправление команд" следующим образом:
приложение.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