2012-11-22 7 views
5

Mögliche Duplizieren:
How can I determine whether Console.Out has been redirected to a file?
How to detect if Console.In (stdin) has been redirected?Konsole umleiten mit Console.CursorLeft

Unser System wird derzeit mit einer CursorLeft Funktion über das letzte, was zu schreiben, die auf der Konsole ausgegeben wurde Fenster:

Console.CursorLeft = 0; 

Diese Funktionalität ist erforderlich, daher kann ich sie nicht ändern, um jedes Mal eine neue Zeile zu drucken.

Beim Umleiten der Konsole in eine Textdatei tritt IOException auf. Wie kann ich die Protokolldatei dazu bringen, diese Ausgaben entweder zu überspringen oder sie dazu zu zwingen, alle auszugeben?

Antwort

0

Es ist ziemlich offensichtlich für mich, dass die Konsole sich von einer Datei unterscheidet. Zum Beispiel können Sie Farben in der Konsole verwenden, die verloren gehen, wenn Sie die Ausgabe in eine Datei umleiten. Somit ist nicht garantiert, dass nach der Umleitung alle Konsolenfunktionen erhalten bleiben können. Ich würde vorschlagen, diese Anforderung in Frage zu stellen, weil es nicht machbar scheint.

Sowieso ist hier ein ähnliches Problem basiert auf der gleichen Win32API unter: "The handle is invalid" when running .net console via java

Hier ist der Artikel von MSDN, die einige Informationen darüber, wie die Konsole funktioniert (im unteren Bereich der Seite) hat: http://msdn.microsoft.com/en-us/library/system.console.aspx

Eine andere Sache, über die Sie nachdenken sollten, ist, dass Sie dieses Problem zwar nicht beheben können, Ihre Anwendung jedoch definitiv umgestalten können, sodass Sie die direkte Interaktion mit der Konsole mit einer Pufferklasse abstrahieren, die alle Änderungen enthält, die Sie vornehmen möchten zu einer einzelnen Zeile (oder mehreren Zeilen) in einem virtuellen Puffer und dann nur einen einzigen Aufruf an Console.WriteLine, wenn Sie sicher wissen, dass alle Änderungen vorgenommen wurden und diese Zeile nicht mehr geändert wird.