3
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方法中创建了一个实例。但是,出于某种原因,即使创建了.logand文件,也没有任何内容被写入。.err我所看到的只是两个大小为 0 字节的空文件,其中没有写入任何文本。

4

1 回答 1

5

你必须刷新你的流,即:

OutputStream.Flush();
于 2012-08-04T12:13:59.917 回答