using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Elight.Utility { /// /// 写入文本 /// internal class TextWriter { /// /// 写入文件路径 /// private readonly string fileName; /// /// Initializes a new instance of the class. /// public TextWriter() : this(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs")) { } /// /// Initializes a new instance of the class. /// /// /// The file name. /// public TextWriter(string fileName) { this.fileName = fileName; } /// /// 写入日志 /// /// 内容 /// 结果 internal bool WriteLog(string logInfo) { if (string.IsNullOrWhiteSpace(logInfo)) { return false; } DateTime timeStamp = DateTime.Now; string path = this.GetFileMainPath(timeStamp); FileInfo lastFile = GetLastAccessFile(path, timeStamp); FileStream fileStream = GetFileStream(lastFile, path, timeStamp); if (fileStream == null) { return false; } try { StreamWriter sw = new StreamWriter(fileStream); sw.BaseStream.Seek(0, SeekOrigin.End); sw.Write(logInfo); sw.Flush(); sw.Close(); return true; } finally { fileStream.Close(); fileStream.Dispose(); } } /// /// 获取文件路径 /// /// timeStamp /// path private string GetFileMainPath(DateTime timeStamp) { return Path.Combine(this.fileName, timeStamp.ToString("yyyyMMdd")); } /// /// 获取最后写入日志的文件 /// /// 路径 /// timeStamp /// FileInfo private static FileInfo GetLastAccessFile(string path, DateTime timeStamp) { FileInfo result = null; DirectoryInfo directoryInfo = new DirectoryInfo(path); if (directoryInfo.Exists) { FileInfo[] fileInfos = directoryInfo.GetFiles(); foreach (FileInfo fileInfo in fileInfos) { if (timeStamp.Hour == fileInfo.CreationTime.Hour) { result = fileInfo; break; } } } else { directoryInfo.Create(); } return result; } /// /// 获取文件流 /// /// lastFile /// path /// timeStamp /// FileStream private static FileStream GetFileStream(FileInfo fileInfo, string path, DateTime timeStamp) { FileStream result; if (fileInfo == null) { try { result = CreateFile(path, GetFileMainName(timeStamp)); } catch (Exception) { return null; } } else if (IsOutOfTimeMaxLength(fileInfo.CreationTime, timeStamp)) { result = CreateFile(path, GetFileMainName(timeStamp)); } else { try { result = fileInfo.OpenWrite(); } catch { result = CreateFile(path, GetFileMainName(timeStamp)); } } return result; } /// /// 创建文件 /// /// 路径 /// 名称 /// FileStream private static FileStream CreateFile(string path, string fileName1) { //return File.Create(@"" + path + "\"" + fileName1 + ".log"); return File.Create(path + @"\" + fileName1 + ".log"); } /// /// 获取文件名称 /// /// timeStamp /// HHmmssfff private static string GetFileMainName(DateTime timeStamp) { return timeStamp.ToString("HH"); } /// /// IsOutOfTimeMaxLength /// /// creationTime /// timeStamp /// bool private static bool IsOutOfTimeMaxLength(DateTime creationTime, DateTime timeStamp) { return Math.Abs((creationTime - timeStamp).TotalHours) >= 1; } } }