using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace HslCommunication.LogNet { /// /// 根据文件的大小来存储日志信息 /// /// /// 此日志的实例是根据文件的大小储存,例如设置了2M,每隔2M,系统将生成一个新的日志文件。 /// public class LogNetFileSize : LogNetBase, ILogNet { #region Constructor /// /// 实例化一个根据文件大小生成新文件的 /// /// 日志文件的保存路径 /// 每个日志文件的最大大小,默认2M public LogNetFileSize(string filePath, int fileMaxSize = 2 * 1024 * 1024) { m_filePath = filePath; m_fileMaxSize = fileMaxSize; LogSaveMode = LogNetManagment.LogSaveModeByFileSize; m_filePath = CheckPathEndWithSprit(m_filePath); } #endregion #region LogNetBase Override /// /// 获取需要保存的日志文件 /// /// 字符串数据 protected override string GetFileSaveName() { //路径没有设置则返回空 if (string.IsNullOrEmpty(m_filePath)) return string.Empty; if(string.IsNullOrEmpty(m_fileName)) { //加载文件名称 m_fileName = GetLastAccessFileName(); } if(File.Exists(m_fileName)) { FileInfo fileInfo = new FileInfo(m_fileName); if (fileInfo.Length > m_fileMaxSize) { //新生成文件 m_fileName = GetDefaultFileName(); } } return m_fileName; } #endregion #region Public Method /// /// 返回所有的日志文件 /// /// 所有的日志文件信息 public string[] GetExistLogFileNames() { if (!string.IsNullOrEmpty(m_filePath)) { return Directory.GetFiles(m_filePath, LogNetManagment.LogFileHeadString + "*.txt"); } else { return new string[] { }; } } #endregion #region Private Method /// /// 获取之前保存的日志文件 /// /// private string GetLastAccessFileName( ) { foreach (var m in GetExistLogFileNames( )) { FileInfo fileInfo = new FileInfo( m ); if (fileInfo.Length < m_fileMaxSize) { m_CurrentFileSize = (int)fileInfo.Length; return m; } } //返回一个新的默认当前时间的日志名称 return GetDefaultFileName( ); } /// /// 获取一个新的默认的文件名称 /// /// private string GetDefaultFileName( ) { //返回一个新的默认当前时间的日志名称 return m_filePath + LogNetManagment.LogFileHeadString + DateTime.Now.ToString( "yyyyMMddHHmmss" ) + ".txt"; } #endregion #region Private Member private string m_fileName = string.Empty; // 当前正在存储的文件名 private string m_filePath = string.Empty; // 存储文件的路径 private int m_fileMaxSize = 2 * 1024 * 1024; //2M private int m_CurrentFileSize = 0; #endregion #region Object Override /// /// 返回表示当前对象的字符串 /// /// 字符串数据 public override string ToString( ) { return $"LogNetFileSize[{m_fileMaxSize}]"; } #endregion } }