Lorenz Antwort ist ein guter Anfang, aber leider nur eine Inspiration verwendet werden. Es gibt mehrere Modi zum Ausführen einer Konsolenanwendung.
Standard-Lauf (in Konsole, ohne Umleitung)
Aller Arbeit wie in der Konsole erwartet.
mit Umleitung von der Konsole ausführen mit Standard-Ein- und/oder Standard-Ausgangsumleitungs
z.B.
type input_file.txt | application.exe
(in Windows-) oder application.exe <input_file.txt
zur Eingabeumleitung
(ersetzen type
mit cat
in Linux)
oder
application.exe | grep pattern
oder zur Ausgabe application.exe >output_file.txt
Umleitungs
oder
type input_file.txt | application.exe | grep pattern
oder application.exe <input_file.txt >output_file.txt
für Eingangs- und Ausgangsumleitungs
mit Umleitung von der Konsole mit der Standardausgabe Umleitungs und Fehlerausgang
Executing z.B. application.exe >output_file.txt 2>error_file.txt
mit versteckter Konsole ausführen und umgeleiteten Ein-/Ausgabe/error
z.B. von einer GUI-Anwendung (Konsole ist überhaupt nicht sichtbar)
mit versteckten Konsole Ausführen ohne Umleitung von Eingabe/Ausgabe/Fehler
Jeder dieser Modus seine eigene ‚Eigenschaften‘ hat . Die Console.WindowHeight
und Console.WindowWidth
arbeiten in Windows für den 1. und 2. Modus in der Standard-Weise. In Linux ist der Rückgabewert im 2. und 3. Modus Null. Unter Linux können Sie daher nicht nur die Weiterleitung von Eingaben erkennen.
Daher kann der Code aus der Lorenz-Antwort nicht für die Erkennung der Umleitung in allen Fällen verwendet werden. Die IOException
wenn Console.WindowHeight
oder Console.WindowWidth
Lesen nur ausgelöst, wenn es ist keine Ausgabe(z dritten Modus) auf die Konsole und nur für Windows-.
private static bool IsInputRedirected()
{
try
{
if (Console.KeyAvailable)
{
return (false);
}
}
catch (InvalidOperationException)
{
return (true);
}
return (false);
}
Für alle anderen Umleitung und Betriebssysteme ... versuchen, zu experimentieren, wie sie erkennen:
Um Eingang Umleitung (in Windows- nur) Verwendung dieser Funktion zu erfassen. Verschiedene Konsoleneigenschaften und Funktionen "arbeiten" (Ausnahme auslösen, oder Nullwerte) für verschiedene Modi.
Getestet an Windows 7 .NET Framework 4 Client Profile
und Mono JIT compiler version 4.2.1 (Debian 4.2.1.102+dfsg2-7ubuntu4)
.
WICHTIG:
Verwenden Sie diese Funktion für die Eingabe nicht in Linux Umleiten (Erkennung mit OS/Plattform, zB Mono für Windows), weil es mehr Probleme verursachen kann, wenn Sie fälschlicherweise Umleitung erwarten und die Umleitung ist nicht aktiv.
Der obige Code wurde für .NET 4.5 implementiert, die jetzt die Eigenschaften IsErrorRedirected, IsInputRedirected und IsOutputRedirected enthält. –
interessante Implementierung, leider ist es nicht für die plattformübergreifende Entwicklung anwendbar. –
Die Funktion isatty() ist auf anderen Plattformen für einen ähnlichen Test verfügbar. –