2010-10-08 5 views
4

Можно создать дубликат:
Mirroring console output to a fileКак подключить экран консоли в текстовый файл?

Я консольное приложение в C#, и я хочу, чтобы войти в текстовый файл на экране появляется каждый текст. Как это сделать ?

К сожалению, эта тема закрыта, несмотря на мой комментарий о Mirroring console output to a file. Принятое сообщение как ответ этой нитью НЕ ПРАВИЛЬНО. Так почему бы не задать вопрос еще раз? Я использую консоль в интерактивном режиме и хочу получить копию всего текста на консоли в текстовом файле. SOS

+0

Смешная вещь об этом вопросе заключается в том, что принятый ответ - это просто еще один «как написать текст для консоли». Я попробовал это, прежде чем задавать этот вопрос. Он добавил двух слушателей (Text & Console), и когда он пишет в Trace, он появляется в консоли и текстовом файле. – Xaqron

+0

@ Xaqron: это не то, что вы хотите? Что именно вы ищете? –

+0

Это то, что я хочу (как говорится в названии вопроса), но ответ о том, как писать в текстовый файл и консоль в одно и то же время, и принимается владельцем вопроса! Я хочу привязать текстовый файл к консоли, независимо от того, кто пишет для консоли. На самом деле я использую консоль для отладки многопоточного приложения, но тесты занимают много времени, и я не хочу терять тексты консоли. Я не собираюсь выполнять регистрацию, так как у меня просто есть то, что я хочу на экране. Я хочу иметь экран, поэтому перенаправление вывода (>>) не является моим выбором. – Xaqron

ответ

0

Простой результат поиска Google: here

К сожалению я больше не программирование с C#, но я проверил код и это имеет смысл в таком подходе :)

+1

Это перенаправляет вывод, а не копирует его. Вы получаете либо выход на консоль, либо вывод файла. См. Связанный вопрос, чтобы посмотреть, как зеркалировать вывод. –

+0

Тогда как насчет StringBuilder с использованием блока в конце программы? – Crag

+0

+ Я искал google, но все было о том, как войти в консоль, а не как подключить консоль к чему-то :) Итак, правильный вопрос - это ключевые слова? – Xaqron

1

Заменить все ссылки на класс Console с классом System.Diagnostics.Trace. Вы можете добавить ConsoleTraceListener и TextWriterTraceListener, а затем все, что вы выведете на консоль, окажется в обоих местах.

+0

Это работает, но что делать, если я не хочу заменять мою консоль.Write() чем-нибудь еще. Есть ли решение для этого, не теряя экран? – Xaqron

+0

Настройте класс трассировки для записи на экран. –

1

Вы можете использовать Console.SetOut для перенаправления вывода в файл, но тогда вы также не получите вывод на консоль, если не используете TextWriter, который передается на оба.

Вы можете попробовать использовать System.Diagnostics.Trace, а затем добавить слушателей как к консоли, так и к файлу.

<configuration> 
    <system.diagnostics> 
    <trace autoflush="false" indentsize="4"> 
     <listeners> 
     <add name="configConsoleListener" 
      type="System.Diagnostics.ConsoleTraceListener" /> 
     <add name="fileLogger" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="LogFile.log" /> 
     <remove name="Default" /> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
</configuration> 
+0

Я предпочитаю иметь избыточность в своем коде, а не заниматься конфигурационным файлом, если это лучший выбор. – Xaqron

2
C:\>yourconsoleapp.exe > yourtextfile.txt 

редактировать: Это предполагает, что ваша консоль приложение не требует ввода данных пользователя.

+0

называется перенаправление - вы также можете передать трубку, если хотите что-то ввести: C: \> yourconsoleapp.exe | "some input"> yourtextfile.txt. Больше информации здесь: http://technet.microsoft.com/en-us/library/bb490982.aspx – markmnl

1

Это может быть слишком упрощенным, но в командной строке, если вы:

C:\>MyApplication >> output.txt 

Это будет писать весь вывод из этого данного приложения к output.txt

Если вы на самом деле не нужно программное решение, это может сделать трюк.

0

Использование log4j.

  1. К log4j website и download dll.
  2. Ссылка dll в вашем проекте.
  3. Добавить это поверх вашего app.config
<appender name="FileAppender" type="log4net.Appender.FileAppender"> 
    <file value="log-file.txt" /> 
    <appendToFile value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] -%message%newline" /> 
    </layout> 
</appender> 


<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] -%message%newline" /> 
    </layout> 
</appender> 
  1. Поместите это в качестве члена любого класса, который вы хотите войти в:

    частного статического Илог только для чтения log = LogManager.GetLogger (TypeOf (Foo));

  2. выстроены в линию, как это войти:

log.debug; ("Привет, мир!")

+0

Спасибо за ваше время. Я компенсировал один отрицательный результат, но не могу принять его в качестве своего ответа. – Xaqron

Смежные вопросы