0

在下面的测试程序中,错误输出被正确写入Error.txt。

using System;
using System.IO;

public class Test{
public static void Main(string[] args){
    Console.SetOut(new StreamWriter("Output.txt", true));
    Console.SetError(new StreamWriter("Error.txt", true));
    int[] test = new int[1];
    Console.Error.WriteLine(test[0]);
}
}

但是,如果我们换行

    Console.Error.WriteLine(test[0]);

    Console.Error.WriteLine(test[7]);

这将导致异常,此异常的错误消息将打印到控制台而不是文件。如何以编程方式对其进行设置,以便将系统引发的异常的错误消息也重定向到文件?

由于运行该程序的上下文,简单的控制台重定向(2> 或 >)不是一个选项。

4

3 回答 3

2

我不认为 Console.SetError 方法实际上改变了应用程序的“DOS”错误输出,只是 Console.Error 输出的地方。您应该尝试 PInvoking SetStdHandle。例如,请参见此处:Redirect stdout+stderr on a C# Windows service

于 2012-07-17T03:17:09.020 回答
0

我相信,错误输出与您尝试使用它的方式不同。它只是输出有关某些错误的信息的一种方式。看看这个http://msdn.microsoft.com/en-us/library/system.console.seterror.aspx

如果你想写一些关于错误的东西,你需要做下一个:

Console.Error.WriteLine("Error Log for Application {0}", appName);

因此,如果您想将有关异常的信息写入 stderr,则需要捕获异常并将其消息定向到 stderr。

...
catch(Exception e) { Console.Error.WriteLine(e.Message); }
于 2012-07-17T03:46:58.273 回答
0

你在寻找这样的东西吗?

FileStream errorFileStream = new FileStream("Error.txt", FileMode.OpenOrCreate);
StreamWriter errorStreamWriter = new StreamWriter(errorFileStream);
Console.SetError(errorStreamWriter);

string[] test = new string[2];
test[0] = "Hello";
test[1] = "World";

try
{
    Console.WriteLine(test[2]);
}
catch (Exception ex)
{
    Console.Error.WriteLine(ex.Message);
}

Console.Error.Close();
于 2012-07-17T03:49:46.197 回答