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;
}
}
}