控制台程序结果为文本文件

时间:2016-11-28 06:45:26

标签: c# console pipeline

我编写了一个使用TCP IP的控制台程序,我现在正在64位计算机上进行调试。 程序将ok连接到服务器并输出屏幕中的内容(直到我调试的错误发生) 我想记录这些屏幕输出,所以我做了

>theProgram.exe > screenrecord.txt

作为管道。这曾经很好用,但由于某种原因现在,程序以这种方式运行虽然连接到网络现在只接收0个字节(顺便说一下,我永远无法理解这个“0字节”是什么意思,我指出了文档在这方面充其量是模糊的)

为什么这种管道会影响TCP IP的行为? 什么是将输出派生到文本文件的方法?

有没有办法将这些输出放到文本文件同时在屏幕上看到它们?

1 个答案:

答案 0 :(得分:0)

控制台一次只能输出1台设备。 Console.SetOut方法将输出定向到另一个设备,例如您的screenrecord.txt.当您执行时显示>theProgram.exe > screenrecord.txt将不会向屏幕显示任何输出。与Console.SetOut相同,因为它被重定向到文件,它不会显示在控制台中。以下代码取自MS Console.SetOut Method (TextWriter)

下面显示了将控制台输出重定向到文件的一种方法。在此代码中... ScreenRecord.txt将保存在项目的debug文件夹中,或者您也可以设置路径。

希望这有帮助。

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