2

経由で書き込まれた独自の出力を読み取る必要があるアプリケーションがあります

Console.WriteLine("blah blah");

私はしようとしています

Process p = Process.GetCurrentProcess();
StreamReader input = p.StandardOutput;
input.ReadLine();

しかし、2行目の「InvalidOperationException」のため動作しません。「StandardOutput がリダイレクトされなかったか、プロセスがまだ開始されていません」のようなメッセージが表示されます (翻訳済み)。

自分の出力をどのように読むことができますか? それを行う別の方法はありますか?そして、自分の入力を書く方法を完成させるには?

出力のあるアプリケーションは既に実行されています。

出力を同じアプリケーションでライブで読みたい。2つめのアプリはありません。唯一。

4

1 に答える 1

6

私はあなたの意図が何であるかを推測しているだけですが、あなたが開始したアプリケーションからの出力を読みたい場合は、出力をリダイレクトすることができます。

 // Start the child process.
 Process p = new Process();
 // Redirect the output stream of the child process.
 p.StartInfo.UseShellExecute = false;
 p.StartInfo.RedirectStandardOutput = true;
 p.StartInfo.FileName = "Write500Lines.exe";
 p.Start();
 // Do not wait for the child process to exit before
 // reading to the end of its redirected stream.
 // p.WaitForExit();
 // Read the output stream first and then wait.
 string output = p.StandardOutput.ReadToEnd();
 p.WaitForExit();

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspxの例

編集:

編集で指定されたとおりに現在のコンソールアプリケーションの出力をリダイレクトする場合は、を使用できます。

private static void Main(string[] args)
{
    StringWriter writer = new StringWriter();
    Console.SetOut(writer);
    Console.WriteLine("hello world");

    StringReader reader = new StringReader(writer.ToString());
    string str = reader.ReadToEnd();
}
于 2013-01-07T09:10:57.763 に答える