You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
5.5 KiB
189 lines
5.5 KiB
2 years ago
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
using System.Text;
|
||
|
using System.Threading.Tasks;
|
||
|
|
||
|
namespace Elight.Utility
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 写入文本
|
||
|
/// </summary>
|
||
|
internal class TextWriter
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 写入文件路径
|
||
|
/// </summary>
|
||
|
private readonly string fileName;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Initializes a new instance of the <see cref="TextWriter"/> class.
|
||
|
/// </summary>
|
||
|
public TextWriter()
|
||
|
: this(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs"))
|
||
|
{
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Initializes a new instance of the <see cref="TextWriter"/> class.
|
||
|
/// </summary>
|
||
|
/// <param name="fileName">
|
||
|
/// The file name.
|
||
|
/// </param>
|
||
|
public TextWriter(string fileName)
|
||
|
{
|
||
|
this.fileName = fileName;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 写入日志
|
||
|
/// </summary>
|
||
|
/// <param name="logInfo">内容 </param>
|
||
|
/// <returns>结果</returns>
|
||
|
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();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取文件路径
|
||
|
/// </summary>
|
||
|
/// <param name="timeStamp">timeStamp</param>
|
||
|
/// <returns>path</returns>
|
||
|
private string GetFileMainPath(DateTime timeStamp)
|
||
|
{
|
||
|
return Path.Combine(this.fileName, timeStamp.ToString("yyyyMMdd"));
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取最后写入日志的文件
|
||
|
/// </summary>
|
||
|
/// <param name="path">路径</param>
|
||
|
/// <param name="timeStamp">timeStamp</param>
|
||
|
/// <returns>FileInfo</returns>
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取文件流
|
||
|
/// </summary>
|
||
|
/// <param name="fileInfo">lastFile</param>
|
||
|
/// <param name="path">path</param>
|
||
|
/// <param name="timeStamp">timeStamp</param>
|
||
|
/// <returns>FileStream</returns>
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 创建文件
|
||
|
/// </summary>
|
||
|
/// <param name="path">路径</param>
|
||
|
/// <param name="fileName1">名称</param>
|
||
|
/// <returns>FileStream</returns>
|
||
|
private static FileStream CreateFile(string path, string fileName1)
|
||
|
{
|
||
|
//return File.Create(@"" + path + "\"" + fileName1 + ".log");
|
||
|
return File.Create(path + @"\" + fileName1 + ".log");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取文件名称
|
||
|
/// </summary>
|
||
|
/// <param name="timeStamp">timeStamp</param>
|
||
|
/// <returns>HHmmssfff</returns>
|
||
|
private static string GetFileMainName(DateTime timeStamp)
|
||
|
{
|
||
|
return timeStamp.ToString("HH");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// IsOutOfTimeMaxLength
|
||
|
/// </summary>
|
||
|
/// <param name="creationTime">creationTime</param>
|
||
|
/// <param name="timeStamp">timeStamp</param>
|
||
|
/// <returns>bool</returns>
|
||
|
private static bool IsOutOfTimeMaxLength(DateTime creationTime, DateTime timeStamp)
|
||
|
{
|
||
|
return Math.Abs((creationTime - timeStamp).TotalHours) >= 1;
|
||
|
}
|
||
|
}
|
||
|
}
|