繁体   English   中英

无法写入文件流

[英]Can't write to filestream

我创建了一个fileStream和一个streamwriter来写入此内容。 问题是我的文件没有显示任何文本。 对象已正确实例化,并且路径和所有内容均已写入,只是看不到任何内容在写入。 直播作家可能有问题吗?

public class Logger {
        StreamWriter sw;
        FileStream logFileStream;

        public enum LogLevel
        {
            Low,
            Medium,
            High
        };

        public Logger(string filePath)
        {
            //logStream = new StreamWriter(logFilePath, false);
            logFileStream = new FileStream(filePath, FileMode.Open, FileAccess.Write);
            sw = new StreamWriter(logFileStream);
        }

        public void LogMessage(string message) {
            LogMessage(message, LogLevel.Low, false);
        }

        public void LogMessage(string message, LogLevel level, bool excludeFromLogFile){
            var prefix = string.Empty;
            ConsoleColor color = ConsoleColor.White;

            switch (level)
            {
                case LogLevel.Medium:
                    prefix = "?";
                    color = ConsoleColor.Yellow;
                    break;
                case LogLevel.High:
                    prefix = "!";
                    color = ConsoleColor.Red;
                    break;
            }
            if (!excludeFromLogFile)
            {
                sw.WriteLine("{0} {1} {2}", prefix, DateTime.Now, message);
            }
            Console.ForegroundColor = color;
            Console.WriteLine("{0}", message);
            Console.ResetColor();
        }

我正在实例化此类,然后调用logger.LogMessage("poop", Logger.LogLevel.High, false); 没有任何显示。

谢谢

正在将写操作缓冲在内存中,请尝试调用logFileStream.Flush(); 在每个Log函数的末尾。

但是,您实际上不应该在两次调用之间保持文件句柄打开,如果您是我,我会在每个函数中打开和关闭它。 如果您要进行大量日志记录,则将其自己缓存在内存中,并在达到一定大小后将其全部转储。

这是您示例的正确版本

  • 在流编写器中使用autoflush = true
  • 在每个请求中打开/关闭流-如果正确实现,则不需要进行自动刷新(在处理StreamWriter之后将进行刷新)
  • 使用FileMode.Append
public class Logger
    {
        public enum LogLevel
        {
            Low,
            Medium,
            High
        };

        private readonly string _filePath;

        public Logger(string filePath)
        {
            //logStream = new StreamWriter(logFilePath, false);

            _filePath = filePath;
        }

        public void LogMessage(string message)
        {
            LogMessage(message, LogLevel.Low, false);
        }

        public void LogMessage(string message, LogLevel level, bool excludeFromLogFile)
        {
            using (var fileStream = new FileStream(_filePath, FileMode.Append, FileAccess.Write))
            {
                using (var writer = new StreamWriter(fileStream) {AutoFlush = true})
                {
                    var prefix = string.Empty;
                    var color = ConsoleColor.White;

                    switch (level)
                    {
                        case LogLevel.Medium:
                            prefix = "?";
                            color = ConsoleColor.Yellow;
                            break;
                        case LogLevel.High:
                            prefix = "!";
                            color = ConsoleColor.Red;
                            break;
                    }

                    if (!excludeFromLogFile)
                    {
                        writer.WriteLine("{0} {1} {2}", prefix, DateTime.Now, message);
                    }

                    Console.ForegroundColor = color;
                    Console.WriteLine("{0}", message);
                    Console.ResetColor();
                }
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM