कैसे Console.WriteLine आउटपुट को टेक्स्ट फाइल में सेव करें


98

मेरे पास एक प्रोग्राम है जो कमांड लाइन कंसोल पर विभिन्न परिणामों को आउटपुट करता है।

मैं एक StreamReaderया अन्य तकनीकों का उपयोग करके आउटपुट को टेक्स्ट फ़ाइल में कैसे सहेज सकता हूं ?

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();

जवाबों:


150

इस उदाहरण को इस लेख से आज़माएँ - कंसोल आउटपुट को किसी फ़ाइल में रीडायरेक्ट करता है

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
इसे मेरे मानक परीक्षण कंसोल टेम्पलेट में जोड़ा गया।
वलमास

क्या यह केवल app.config का उपयोग करना संभव है, प्रोग्रामेटिक रूप से नहीं, अनुभाग system.diagnostics? कोई नमूना?
कीकनेट

क्या इसका उपयोग करना बेहतर नहीं है ?
जॉन

मैंने एक छोटी उपयोगिता वर्ग ( DebugLogger) लिखी है जिसे मैं अपनी सभी इकाई परीक्षणों में शामिल करता हूं और एक के रूप में आरंभ करता हूं private static readonly। में [ClassCleanup]विधि मैं निष्पादितDispose()
IAbstract

16
मुझे आश्चर्य है कि अगर आप कंसोल पर आउटपुट दिखा सकते हैं और क्या यह एक ही समय में फ़ाइल में सहेज सकता है।
जॉन एलेक्सियौ

54

कोशिश करें कि यह काम करे:

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

3
शानदार उत्तर - इस रीडायरेक्ट कंसोल कंसोल आउटपुट पर ध्यान दें , ताकि आप केवल लॉगिंग प्राप्त कर सकें। इसके अलावा, आप पिछले लॉग रखने के लिए FileMode.Append का उपयोग कर सकते हैं।
डनक सेप

3
Console.SetOut(System.IO.TextWriter.Null)यदि आप लॉग ऑफ करना चाहते हैं।
चेक

22

प्रश्न के लिए:

Console.Writeline Outputs को टेक्स्ट फाइल में कैसे सेव करें?

मैं 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


14

क्या आप उसके लिए कोड लिखना चाहते हैं या केवल कमांड-लाइन सुविधा 'कमांड रिडायरेक्शन' का उपयोग इस प्रकार करते हैं:

app.exe >> output.txt

यहां प्रदर्शित होता है: http://discomoose.org/2006/05/01/output-redirection-to-a-file-from-the-windows-command-line/ (कम से संग्रहीत archive.org )

संपादित करें: लिंक मृत, यहाँ एक और उदाहरण है: http://pcsupport.about.com/od/commandlinereference/a/redirect-command-output-to-file.htm


यह समाधान मेरे लिए बेहतर है क्योंकि मैंने पाया कि मेरे आउटपुट को TextWriter समाधान का उपयोग करके छोटा किया गया था। यदि आप एक नया लिंक चाहते हैं, तो कमांड रिडायरेक्शन उदाहरण के लिए खोजें। Technet.microsoft.com/en-us/library/bb490982.aspx
mafue

उदाहरण के लिए बैट / cmd फाइलों में रीडायरेक्ट फीचर का उपयोग करने से आउटपुट कोडपेज 850 में परिवर्तित हो जाता है।
गाल्मोक

5

एक वर्ग लकड़हारा (नीचे कोड) बनाएं, कंसोल को बदलें। Logite.Out के साथ लाइटलाइन। अंत में स्ट्रिंग लॉग में एक फाइल लिखें

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

यही वह है जिसकी तलाश में मैं हूं।
झोलमन


2

WhoIsNinja द्वारा उत्तर के आधार पर:

यह कोड कंसोल में और लॉग स्ट्रिंग में दोनों को आउटपुट करेगा, जिसे किसी फ़ाइल में सहेजा जा सकता है, या तो लाइनों को जोड़कर या इसे ओवरराइट करके।

लॉग फ़ाइल का डिफ़ॉल्ट नाम 'Log.txt' है और इसे एप्लिकेशन पथ के अंतर्गत सहेजा गया है।

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

    }
    public static void SaveLog(bool Append = false, string Path = "./Log.txt")
    {
        if (LogString != null && LogString.Length > 0)
        {
            if (Append)
            {
                using (StreamWriter file = System.IO.File.AppendText(Path))
                {
                    file.Write(LogString.ToString());
                    file.Close();
                    file.Dispose();
                }
            }
            else
            {
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(Path))
                {
                    file.Write(LogString.ToString());
                    file.Close();
                    file.Dispose();
                }
            }               
        }
    }
}

तो आप इसे इस तरह से उपयोग कर सकते हैं:

Logger.WriteLine("==========================================================");
Logger.Write("Loading 'AttendPunch'".PadRight(35, '.'));
Logger.WriteLine("OK.");

Logger.SaveLog(true); //<- default 'false', 'true' Append the log to an existing file.

1
जबकि महान, आप स्वरूपण कार्यक्षमता में बनाया गया खो देते हैं Console.WriteऔरConsole.WriteLine
कोल जॉनसन

1

अपने app.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 का उपयोग कर सकते हैं , फिर हम आसानी से सभी लॉग संदेशों को देख सकते हैं।

संदर्भ:
http://blogs.msdn.com/b/jjameson/archive/2009/06/18/configuring-log-in-a-console-application.aspx http://www.thejoyofcode.com/fromo_to_log_with_system_diagnostics_in_15_minutes.aspx
कंसोल
समस्या के लिए रीडायरेक्ट ट्रेस आउटपुट डिबग आउटपुट को एक फाइल में ट्रेस श्रोता का उपयोग करके रीडायरेक्ट करता है
https://ukadcdiagnostics.codeplex.com/
http://geekswithblogs.net/theunstablemind/archive/2009/09/09/adventures-in-system.diagnostics .aspx


Trace.WriteLine के साथ यह काम नहीं करेगा और कंसोल नहीं। Witeite?
तोमर कगन

@TomerCagan शायद ConsoleTraceListener और Console.SetOut का उपयोग कर रहा है। संदर्भ में अधिक जानकारी।
किकेनेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.