using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Windows.Forms; namespace PayForApp.Business { public class LogHelper { public static string path = Application.StartupPath; private static Dictionary lockDic = new Dictionary(); public static void WriteServiceLog(string LogData) { LogData = DateTime.Now.ToLongTimeString() + ":" + LogData; string LogName = "日志_Send" + System.DateTime.Now.Year.ToString() + "-" + System.DateTime.Now.Month.ToString() + "-" + System.DateTime.Now.Day.ToString() + ".log"; string filename = path + "\\log\\" + LogName; if (!Directory.Exists(path + "\\log\\")) Directory.CreateDirectory(path + "\\log\\"); using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, 8, FileOptions.Asynchronous)) { Byte[] _data = new UTF8Encoding().GetBytes(LogData + Environment.NewLine); bool flag = true; long slen = _data.Length; long len = 0; while (flag) { try { if (len >= fs.Length) { fs.Lock(len, slen); lockDic[len] = slen; flag = false; } else { len = fs.Length; } } catch (Exception ex) { try { while (!lockDic.ContainsKey(len)) { len += lockDic[len]; } } catch { } } } fs.Seek(0, SeekOrigin.End); fs.Write(_data, 0, _data.Length); fs.Flush(); fs.Close(); } } public static void WriteServiceLog1(string LogData) { LogData = DateTime.Now.ToLongTimeString() + ":" + LogData; string LogName = "日志_Send" + System.DateTime.Now.Year.ToString() + "-" + System.DateTime.Now.Month.ToString() + "-" + System.DateTime.Now.Day.ToString() + ".log"; string filename = path + "\\log\\" + LogName; if (!Directory.Exists(path + "\\log\\")) Directory.CreateDirectory(path + "\\log\\"); FileStream fs = new FileStream(filename, FileMode.OpenOrCreate); fs.Seek(0, SeekOrigin.End); byte[] _data = new UTF8Encoding().GetBytes(LogData + "\r\n"); fs.Write(_data, 0, _data.Length); fs.Flush(); fs.Close(); } public static void WriteServiceLog2(string LogData) { LogData = DateTime.Now.ToLongTimeString() + ":" + LogData; string LogName = "日志_Receive" + System.DateTime.Now.Year.ToString() + "-" + System.DateTime.Now.Month.ToString() + "-" + System.DateTime.Now.Day.ToString() + ".log"; string filename = path + "\\" + LogName; FileStream fs = new FileStream(filename, FileMode.OpenOrCreate); fs.Seek(0, SeekOrigin.End); byte[] _data = new UTF8Encoding().GetBytes(LogData + "\r\n"); fs.Write(_data, 0, _data.Length); fs.Flush(); fs.Close(); } /// /// 删除指定目录下的指定后缀名的文件 /// /// 要删除的文件所在的目录,是绝对目录,如d:\temp /// 要删除的文件的后缀名的一个数组,比如masks中包含了.cs,.vb,.c这三个元素 /// 表示是否需要递归删除,即是否也要删除子目录中相应的文件 /// 表示是否忽略隐藏文件 /// /// 表示总共删除的文件数 public static void DeleteFiles(string directory, string[] masks, bool searchSubdirectories, bool ignoreHidden, int delDay, ref int deletedFileCount) { //先删除当前目录下指定后缀名的所有文件 foreach (string file in Directory.GetFiles(directory, "*.*")) { if (!(ignoreHidden && (File.GetAttributes(file) & FileAttributes.Hidden) == FileAttributes.Hidden)) { foreach (string mask in masks) { if (Path.GetExtension(file) == mask) { FileInfo _FileInfo = new FileInfo(file); if (_FileInfo.LastWriteTime < DateTime.Now.Date.AddDays(-1 * delDay)) { _FileInfo.Delete(); deletedFileCount++; } } } } } //如果需要对子目录进行处理,则对子目录也进行递归操作 if (searchSubdirectories) { string[] childDirectories = Directory.GetDirectories(directory); foreach (string dir in childDirectories) { if (!(ignoreHidden && (File.GetAttributes(dir) & FileAttributes.Hidden) == FileAttributes.Hidden)) { DeleteFiles(dir, masks, searchSubdirectories, ignoreHidden, delDay, ref deletedFileCount); } } } } } }