5

重複の可能性:
Console.Out がファイルにリダイレクトされたかどうかを確認するにはどうすればよいですか?
Console.In (標準入力) がリダイレクトされたかどうかを検出する方法は?

私たちのシステムは現在CursorLeft、コンソール ウィンドウに出力された最後のものを上書きする関数を使用しています。

Console.CursorLeft = 0;

これは必要な機能なので、毎回新しい行を印刷するように変更することはできません。

コンソールをテキスト ファイルにリダイレクトするときにIOException発生します。これらの出力の表示をスキップするか、すべての出力を強制的に書き出すようにログ ファイルを取得するにはどうすればよいですか?

4

1 に答える 1

1

コンソールがファイルとは異なることは明らかです。たとえば、出力をファイルにリダイレクトすると失われる色をコンソールで使用できます。したがって、リダイレクト後にすべてのコンソール機能が保持されるとは限りません。実現可能ではないように思われるため、その要件に疑問を呈することをお勧めします。

とにかく、下にある同じ Win32API に基づく同様の問題があります: 「ハンドルが無効です」Java 経由で .net コンソールを実行する場合

コンソールの仕組みに関する情報が記載されている MSDN の記事を次に示します (ページの下部): http://msdn.microsoft.com/en-us/library/system.console.aspx

考慮すべきもう 1 つのことは、この問題を修正できない場合でも、アプリケーションを確実に再構築できるということです。これにより、コンソールとの直接の対話を、必要なすべての変更を蓄積するバッファー クラスで抽象化できます。仮想バッファー内の 1 行 (または複数行) を作成し、すべての変更が完了し、その行が今後変更されないことが確実にわかっている場合にのみ、Console.WriteLine を 1 回呼び出します。

于 2012-11-24T10:32:11.050 に答える