2016-11-28 10 views
0

私はTCP IPを使用するコンソールプログラムを作成しましたが、今は64ビットマシンでデバッグしています。 (私は、デバッグしていますエラーが発生するまで) プログラムは、私はパイプとしてコンソールプログラムの結果をテキストファイル

>theProgram.exe > screenrecord.txt

をしたように、これらの画面出力を記録したい 画面でサーバーと出力のものにOKを接続します。これは以前よりうまく動作していましたが、何らかの理由でプログラムがこの方法で実行されていてもネットワークに接続しても0バイトしか受信できませんでした(この "0バイト"

なぜこの配管がTCP IPの動作に影響を与えているのですか? と、テキストファイルへの出力を引き出す方法は何ですか?

これらの出力をテキストファイルに同時に表示する方法はありますか?

+0

さらに詳しい情報を教えてください。例外 –

+0

このプログラムはC#としてタグ付けされていますが、私はあなたがプログラムを作成したと仮定します。なぜデバッグ用のモジュールをファイルに追加するだけですか?自分で書くことも、既存のものを使用することもできます(例:[Log4NET](https://csharp.today/log4net-tutorial-great-library-for-logging/))。 – Tatranskymedved

+0

@Tatranskymedvedありがとう、モジュールを追加することについてもっと詳しく教えていただけますか? – KansaiRobot

答えて

0

コンソールは一度に1つのデバイスにしか出力できません。 Console.SetOutメソッドは、screenrecord.txt.などの別のデバイスに出力を指示します。>theProgram.exe > screenrecord.txtを表示すると、出力が画面に表示されません。 Console.SetOutと同じです。ファイルにリダイレクトされるため、コンソールには表示されません。以下のコードはMS Console.SetOut Method (TextWriter)から取られました

以下は、コンソール出力をファイルにリダイレクトする方法の1つを示しています。このコードで... ScreenRecord.txtはプロジェクトのデバッグフォルダに保存されるか、パスを設定することもできます。

これが役に立ちます。

static void Main(string[] args) 
{ 
    Console.WriteLine("Start Of Main - output not redirected yet!"); 
    FileStream fs = new FileStream("ScreenRecord.txt", FileMode.Create); 
    // First, save the standard output. 
    TextWriter tmp = Console.Out; 
    StreamWriter sw = new StreamWriter(fs); 
    Console.SetOut(sw); 
    Console.WriteLine("this writes to file 1"); 
    printStuff(); 
    Console.SetOut(tmp); 
    Console.WriteLine("this line not in file"); 
    Console.ReadKey(); 
    sw.Close(); 
} 

private static void printStuff() 
{ 
    for (int i = 1; i < 7; i++) 
    Console.WriteLine("printStuff " + i); 
} 
関連する問題