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 字节的空文件,其中没有写入任何文本。

Console.Error 和 Console.Out 未在重定向的文件流上写入

您必须刷新流,即:

OutputStream.Flush();