2016-05-11 13 views
1

SVNコミットのno.of行の変更に関する詳細情報を検証するためのC#アプリケーションを作成しています。コマンドプロンプトで以下の引数を提供した後、それは、リビジョン番号、著者名と最後に変更された日付などを...表示コマンドプロンプト出力を取得する方法

引数: 情報-r {改正なし} {ソースパス}のsvn

例えば、 - svn info -r 113653 "F:\ SVN"

私はC#でも同じことを達成しなければなりません。 C#で上記の引数を与えている間、コマンドプロンプトから出力(リビジョン番号、作者名、最後に変更された日付)を読み込んで文字列に格納する必要があります。私はStandardOutput.ReadToEnd()を試しましたが、私の要求を満たすことができませんでした。詳細な説明が参考になります。

答えて

1

this questionで説明したように、C#でコマンドプロンプトからコマンドを実行しようとしましたか?それは文字列として出力を返します

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; 
    } 

:あなたはコマンドを実行すると、コンソールから標準出力を取得するには、次のメソッドを使用することができます

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

はい、私は試しました。コマンドプロンプトが開きましたが、何も実行されませんでした。しかし、コマンドプロンプトで引数を直接指定してもうまくいきます。 – ManoRoshan

+0

コマンド文で '/ C'を忘れました。それは実際にコマンドを実行します。私の編集を参照してください。 –

+0

上記の例のようにコマンドで/ cを使用すると、複数のcmdプロンプトウィンドウが開き、何も実行されません。 – ManoRoshan

0

。 また、(これは上記に使用される)は、この方法が必要です。

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はDataReceivedEventHandlerであり、それはCMDOUT変数に受信したSTD出力を連結します。

関連する問題