2012-04-26 31 views
10

Her Console için bir önek (tarih ve saat) eklemenin bir yolunu arıyorum.Write [Satır]. Bunu yapmak için önerilen bir yol arıyorum, çıktıyı değiştirmek için önerilen yolun Console.SetOut'u kullanması gibi.Console.Write öneki için önerilen yol nedir?

String.Format ("{0} {1}", DateTime.Now, msg) yapabileceğimin farkındayım, ancak bunu son başvurum olarak bırakmaya çalışıyorum.

sorun çıktı çalışma zamanında değiştirilebilir ve varsayılan biri zaten geçerli zamanı ekler olmasıdır. Koduma eklersem, tarihi çoğaltacağım.

Böyle bir şey var mı? Monotouch kullanıyorum, bu yüzden sadece onun için derlenmiş kütüphaneleri kullanabilirim.

cevap

11

, örneğin bir Encoding ve geçersiz kılmaları sağlamak ... tüm kod dosyalarında MyConsole ile bir adım daha ileri ve takma Console alabilsem WriteLine ve Write. Console.setOut(x) ile değiştirmeden önce orijinal Console.Out'u saklayın. ben şu anda ne yapıyorum

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

Bu en iyi yol. MonoTouch 5.3+, iOS 5.1'de eklenmiş olan ** stdout ** sınırlaması etrafında çalışmak için 'Console.Write *' '' NSLog' 'a yeniden yönlendirir. Kaynak kodun ön sürümü blogumda yer almaktadır: http://spouliot.wordpress.com/2012/03/13/ios-5-1-vs-stdout/ – poupou

+0

Bu sorunu nasıl güzelce bütünleştirir ve çözer? soruda belirtilen çift tarihler –

9

Konsol çağrısını kendi sınıfınızla değiştirebilirsiniz.

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

Sonra tabii ki, Console.Write yapılan tüm çağrılar MyConsole.Write olur.

Ayrıca

Sen System.IO.TextWrite den inherit gerek
using Console = MyNamespace.MyConsole; 
+0

Bu tam da:

İşte tam kod örneği bu. Mevcut mimari –

+0

takmak için bir yolu olup olmadığını merak ediyordu, bu çözüm işe yarıyor, orijinal konsol çıkışı kullanırken çift tarih ile uğraşmaz. –

İlgili konular