Console.Error和Console.Out不写在重定向文件流上

时间:2012-08-04 11:58:56

标签: c# .net console stdout stderr

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

我在ErrorLog方法中创建了Main的实例。但是,由于某些原因,即使创建了.log.err文件,也不会写入任何内容。我看到的只是两个大小为0字节的空文件,没有写入文本。

1 个答案:

答案 0 :(得分:5)

你必须刷新你的流:

OutputStream.Flush();