Feedback

C# - Standardein- und ausgabe eines Prozesses umleiten

Veröffentlicht von am 13.12.2009
(2 Bewertungen)
Möchte man die Ausgabe eines (meist Konsolen-) Programms auslesen sobald es sich beendet hat, so muss der StandardOutput oder kurz StdOut des Prozesses umgeleitet werden. Die ReadProcessOutput-Methode erhält Dateiname und Argumente des aufzurufenden Programmes und liefert den StdOut als String nach Beendigung zurück.
Neben dem StandardOutput gibt es außerdem noch den StandardInput- (StdIn) und den StandardError-Stream (StdErr). Über den StdIn kann man dem laufenden Konsolenprozess Daten mitteilen, die normalerweise über die Tastatur eingegeben werden. Dies erlaubt die zweite Überladung der ReadProcessOutput-Methode. Die Verwendung des StdErr, in den Fehlermeldungen geschrieben werden, erfolgt analog zum StdOut, weswegen das Auslesen dessen nicht im Codebeispiel enthalten ist.

Möchte man bereits während der Prozess noch läuft auf den StdOut oder StdErr zugreifen, so ist dies ebenfalls möglich. Dazu den ReadToEnd-Aufruf ersetzen und stattdessen direkt mit der bereitgestellten StreamReader-Klasse arbeiten.

Prinzipiell besitzt jedes Programm die drei Standard-Streams, jedoch wird meist nur bei Konsolenprogrammen StdIn und StdOut (und in seltenen Fällen StdErr) verwendet.
GFU-Schulungen  [Anzeige]

VB.NET Einführung

Die Schulung zeigt Ihnen, wie Sie einfache, benutzerorientierte Programme, die auf Datenbanken zugreifen, in VB.NET eigenständig entwickeln. 

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

using System.Diagnostics;

static string ReadProcessOutput(string fileName, string arguments)
{
    Process process = new Process();

    process.StartInfo.FileName = fileName;
    process.StartInfo.Arguments = arguments;
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;

    process.Start();

    string stdOut = process.StandardOutput.ReadToEnd();

    process.Close();

    return stdOut;
}

static string ReadProcessOutput(string fileName, string arguments, string stdIn)
{
    Process process = new Process();

    process.StartInfo.FileName = fileName;
    process.StartInfo.Arguments = arguments;
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardInput = true;
    process.StartInfo.RedirectStandardOutput = true;

    process.Start();

    process.StandardInput.Write(stdIn);
    process.StandardInput.Close();

    string stdOut = process.StandardOutput.ReadToEnd();

    process.Close();

    return stdOut;
}

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!