2016-05-11 5 views
1

Ich schreibe eine C# -Anwendung für die Validierung der detaillierten Informationen über die Anzahl der Zeilen Änderungen in SVN-Commit. Nach unten Argumente Eingabeaufforderung bereitstellt, zeigt es die Revisionsnummer, Name des Autors und zuletzt etc geändert Datum ...Wie bekomme ich die Eingabeaufforderung Ausgabe

Argument: svn info -r {Revision no} {Quellpfad}

ZB - svn info -r 113653 "F: \ SVN"

Ich muss das gleiche in C# auch erreichen. Bei Angabe der obigen Argumente in C# sollte die Ausgabe (Versionsnummer, Autorenname und Datum der letzten Änderung) von der Eingabeaufforderung gelesen und in einer Zeichenfolge gespeichert werden. Ich habe versucht, die StandardOutput.ReadToEnd() aber konnte meine Anforderung nicht erfüllen. Jede detaillierte Erklärung wird hilfreich sein.

Antwort

1

Haben Sie versucht, den Befehl nur an einer Eingabeaufforderung mit C# auszuführen, wie in this question erläutert?

string strCmdText = @"/C svn info -r 113653 ""F:\SVN"""; 
System.Diagnostics.Process.Start("CMD.exe",strCmdText); 
+0

Ja, ich habe es versucht. Die Eingabeaufforderung wurde geöffnet, es wurde jedoch nichts ausgeführt. Aber es funktioniert einwandfrei, während das Argument direkt in der Eingabeaufforderung angegeben wird. – ManoRoshan

+0

Hoppla, vergiss das '/ C' im Befehlstext. Das führt den Befehl tatsächlich aus. Siehe meine Bearbeitung. –

+0

Wenn ich die/c in den Befehl wie in Ihrem obigen Beispiel verwenden, wird mehrere Eingabeaufforderungsfenster geöffnet und es wird nichts ausgeführt. – ManoRoshan

0

können Sie die folgende Methode verwenden, um einen Befehl auszuführen und die Standard Ausgabe von der Konsole abrufen:

public static string StdOut(string args) 
    { 
     string cmdOut = ""; 

     ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/C " + args) 
     { 
      WindowStyle = ProcessWindowStyle.Hidden, 
      UseShellExecute = false, 
      RedirectStandardOutput = true, 
      RedirectStandardError = true, 
      CreateNoWindow = true 
     }; 

     cmdOut = ExecuteCommand(cmdOut, startInfo); 
     return cmdOut; 
    } 

Es wird die Ausgabe als String zurück. Sie werden auch diese Methode müssen (wie es in dem obigen verwendet wird):

private static string ExecuteCommand(string cmdOut, ProcessStartInfo startInfo) 
    { 
     Process p = Process.Start(startInfo); 
     p.OutputDataReceived += (x, y) => cmdOut += y.Data; 
     p.BeginOutputReadLine(); 
     p.BeginErrorReadLine(); 
     p.WaitForExit(); 

     return cmdOut; 
    } 

p.OutputdataReceived a DataReceivedEventHandler ist und es wird jede std Ausgang auf die empfangenen CMDOUT variable verketten.