2012-04-26 10 views
10

मैं प्रत्येक कंसोल में एक उपसर्ग (दिनांक और समय) डालने का एक तरीका ढूंढ रहा हूं। राइट [लाइन]। मैं ऐसा करने के लिए एक अनुशंसित तरीका ढूंढ रहा हूं, जैसे आउटपुट बदलने के लिए अनुशंसित तरीका Console.SetOut का उपयोग करना है।Console.Write उपसर्ग करने का अनुशंसित तरीका क्या है?

मुझे अच्छी तरह से पता है कि मैं स्ट्रिंग कर सकता हूं। फोर्मैट ("{0} {1}", डेटटाइम.अब, msg), लेकिन मैं इसे अपने अंतिम उपाय के रूप में छोड़ने की कोशिश कर रहा हूं।

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

क्या ऐसी कोई बात है? मैं मोनोटच का उपयोग कर रहा हूं, इसलिए मैं केवल इसके लिए संकलित पुस्तकालयों का उपयोग कर सकता हूं।

उत्तर

11

आप System.IO.TextWrite से inherit की जरूरत है, प्रदान करते हैं एक Encoding और जैसे के लिए ओवरराइड WriteLine और WriteConsole.setOut(x) के साथ बदलने से पहले मूल Console.Out स्टोर करें।

class PrefixedWriter : TextWriter 
{ 
    private TextWriter originalOut; 

    public PrefixedWriter() 
    { 
     originalOut = Console.Out; 
    } 

    public override Encoding Encoding 
    { 
     get { return new System.Text.ASCIIEncoding(); } 
    } 
    public override void WriteLine(string message) 
    { 
     originalOut.WriteLine(String.Format("{0} {1}", DateTime.Now, message)); 
    } 
    public override void Write(string message) 
    { 
     originalOut.Write(String.Format("{0} {1}", DateTime.Now, message)); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.SetOut(new PrefixedWriter()); 
     Console.WriteLine("test 1 2 3"); 
     Console.ReadKey(); 
    } 
} 
+0

यह सबसे अच्छा तरीका है। मोनो टच 5.3+ आईओएस 5.1 में जोड़ा गया ** stdout ** सीमा ऐप्पल के आसपास काम करने के लिए 'कंसोल। राइट *' 'NSLog' को रीडायरेक्ट करें। स्रोत कोड का प्रारंभिक संस्करण मेरे ब्लॉग पर उपलब्ध है: http://spouliot.wordpress.com/2012/03/13/ios-5-1-vs-stdout/ – poupou

+0

प्यार कैसे यह अच्छी तरह से एकीकृत करता है और समस्या को हल करता है प्रश्न में उल्लिखित डबल तिथियां –

9

आप बस अपनी खुद की कक्षा के साथ कंसोल कॉल को प्रतिस्थापित कर सकते हैं।

class MyConsole 
{ 
    public static void WriteLine(string msg) 
    { 
     Console.Write(String.Format("{0} {1}", DateTime.Now, msg)); 
    } 
} 

तो निश्चित रूप से, Console.Write के लिए सभी कॉल MyConsole.Write हो जाते हैं।

आप भी इसे एक कदम आगे और उर्फ ​​Console ले सकता है सभी कोड फ़ाइलों में MyConsole साथ ...

using Console = MyNamespace.MyConsole; 
+0

यह ठीक है अभी मैं क्या कर रहा हूं:

यहां एक संपूर्ण कोड उदाहरण है। यह सोच रहा था कि वर्तमान आर्किटेक्चर –

+0

में प्लग करने का कोई तरीका था, हालांकि, यह समाधान काम करता है, यह मूल कंसोल आउटपुट का उपयोग करते समय डबल डेट से निपटता नहीं है। –

संबंधित मुद्दे

 संबंधित मुद्दे