Console.Error 和 Console.Out 未在重定向的文件流上写入
本文关键字:Console 文件 重定向 Error Out | 更新日期: 2024-10-24 07:44:16
namespace Pro
{
class ErrorLog
{
public ErrorLog(RenderWindow app)
{
startTime = DateTime.Now.ToString("yyyyMMddHHmm");
outFile = @"data'runtime'" + startTime + ".log";
errFile = @"data'runtime'" + startTime + ".err";
try
{
OutputStream = new StreamWriter(outFile);
ErrorStream = new StreamWriter(errFile);
}
catch (Exception e)
{
Console.Error.WriteLine(e);
MessageBox.Show(e.Message);
Environment.Exit(1);
}
var info = new ComputerInfo();
Console.SetOut(OutputStream);
Console.SetError(ErrorStream);
Console.WriteLine("Start Time: {0}", startTime);
Console.WriteLine("Platform: {0}", info.OSFullName);
Console.WriteLine("Available Memory: {0}", info.AvailablePhysicalMemory);
ReportApplicationData(app);
}
~ErrorLog()
{
if (wereErrors)
{
var msg = string.Format("There were some runtime errors. Kindly see {0} for the error messages and {1} for the runtime log",
errFile, outFile);
DisplayMessage(msg);
}
Console.Error.Close();
Console.Out.Close();
}
public void ReportApplicationData(RenderWindow app)
{
this.app = app;
Console.WriteLine("Screen Width = {0}, Height = {1}, Depth = {2}",
app.Width, app.Height, app.Settings.DepthBits);
}
public void DisplayMessage(string msg)
{
Console.WriteLine("Application Message : '{0}'", msg);
MessageBox.Show(msg);
}
public void DisplayError(bool fatal, string format, params object[] arg)
{
Console.Error.WriteLine(format, arg);
wereErrors = true;
if (fatal) app.Close();
}
public TextWriter ErrorStream
{
get;
private set;
}
public TextWriter OutputStream
{
get;
set;
}
bool wereErrors = false;
string startTime;
string errFile;
string outFile;
RenderWindow app; // SFML RenderWindow
}
}
我在Main
方法中创建了一个ErrorLog
实例。但是,由于某种原因,即使创建了.log
和.err
文件,也不会将任何内容写入这些文件。我看到的只是两个大小为 0 字节的空文件,其中没有写入任何文本。
您必须刷新流,即:
OutputStream.Flush();