You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
4.1 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace HslCommunication.LogNet
{
/// <summary>
/// 根据文件的大小来存储日志信息
/// </summary>
/// <remarks>
/// 此日志的实例是根据文件的大小储存例如设置了2M每隔2M系统将生成一个新的日志文件。
/// </remarks>
public class LogNetFileSize : LogNetBase, ILogNet
{
#region Constructor
/// <summary>
/// 实例化一个根据文件大小生成新文件的
/// </summary>
/// <param name="filePath">日志文件的保存路径</param>
/// <param name="fileMaxSize">每个日志文件的最大大小默认2M</param>
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
/// <summary>
/// 获取需要保存的日志文件
/// </summary>
/// <returns>字符串数据</returns>
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
/// <summary>
/// 返回所有的日志文件
/// </summary>
/// <returns>所有的日志文件信息</returns>
public string[] GetExistLogFileNames()
{
if (!string.IsNullOrEmpty(m_filePath))
{
return Directory.GetFiles(m_filePath, LogNetManagment.LogFileHeadString + "*.txt");
}
else
{
return new string[] { };
}
}
#endregion
#region Private Method
/// <summary>
/// 获取之前保存的日志文件
/// </summary>
/// <returns></returns>
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( );
}
/// <summary>
/// 获取一个新的默认的文件名称
/// </summary>
/// <returns></returns>
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
/// <summary>
/// 返回表示当前对象的字符串
/// </summary>
/// <returns>字符串数据</returns>
public override string ToString( )
{
return $"LogNetFileSize[{m_fileMaxSize}]";
}
#endregion
}
}