文件隊列處理工具
阿新 • • 發佈:2018-05-28
mod 本地 pty length bject nds format ID pat
文件隊列
寫了一個文件隊列處理的小工具。
/// <summary> /// 文件隊列工具。 /// </summary> public class FileQueueTool { /// <summary> /// 將文件加入到本地隊列。 /// </summary> /// <param name="queueDir">文件夾。</param> /// <param name="fileName">文件名。</param> /// <param name="fileContent">內容。</param> public static void AddFileToQueue(string queueDir, string fileName, string fileContent) { var saveDir = GetSaveDir(queueDir); if (!Directory.Exists(saveDir)) Directory.CreateDirectory(saveDir); var savePath = Path.Combine(saveDir, fileName); string tempFilePath = string.Format(@"{0}.bak", savePath); using (var fs = new FileStream(tempFilePath, FileMode.Create, FileAccess.ReadWrite)) { using (var sw = new StreamWriter(fs)) { sw.Write(fileContent); } } File.Copy(tempFilePath, savePath, true); File.Delete(tempFilePath); } /// <summary> /// 從隊列中移除文件。 /// </summary> public static void RemoveFileFromQueue(string filePath) { File.Delete(filePath); } /// <summary> /// 從隊列中移除文件。 /// </summary> public static void RemoveFileFromQueue(FileInfo fileInfo) { File.Delete(fileInfo.FullName); } /// <summary> /// 獲取文件。 /// </summary> public static List<FileInfo> GetFilesFromQueue(string queueDir, int takeCount, string type = "") { var items = new List<FileInfo>(); if (!Directory.Exists(queueDir)) return items; DirectoryInfo homeDir = new DirectoryInfo(queueDir); DirectoryInfo[] dirs = homeDir.GetDirectories().OrderBy(p => Convert.ToInt32(p.Name)).ToArray(); for (int i = 0; i < dirs.Length; i++) { DirectoryInfo dir = dirs[i]; var fileInfos = !string.IsNullOrEmpty(type) ? dir.GetFiles(type) : dir.GetFiles(); if (fileInfos.Length == 0) { //做一個隊列延遲 if (dir.CreationTime < DateTime.Now.AddMinutes(-2)) { var files = dir.GetFiles(); if (files.Length == 0) Directory.Delete(dir.FullName, false); else { foreach (var file in files) { if (file.Name.EndsWith(".data")) continue; if (file.Name.EndsWith(".bak")) { file.MoveTo(file.FullName.Replace(".bak", "")); } } } } } foreach (var fileInfo in fileInfos) { items.Add(fileInfo); if (items.Count >= takeCount) return items; } } return items; } /// <summary> /// 讀取文件內容。 /// </summary> public static T ReadObjectFromQueue<T>(string filePath) { T t = default(T); var fi = new FileInfo(filePath); if (fi.Exists) { using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { string content; using (StreamReader sr = new StreamReader(fs)) { content = sr.ReadToEnd(); } if (!string.IsNullOrEmpty(content)) { t = JsonConvert.DeserializeObject<T>(content); } fs.Close(); } } return t; } /// <summary> /// 讀取文件內容。 /// </summary> public static string ReadStringFromQueue(string filePath) { string content = ""; var fi = new FileInfo(filePath); if (fi.Exists) { using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using (StreamReader sr = new StreamReader(fs)) { content = sr.ReadToEnd(); } fs.Close(); } } return content; } public static DirectoryInfo[] GetQueueDirs(string queueDir) { DirectoryInfo homeDir = new DirectoryInfo(queueDir); return homeDir.GetDirectories(); } private static string GetSaveDir(string queuePath) { if (!Directory.Exists(queuePath)) { Directory.CreateDirectory(queuePath); } return Path.Combine(queuePath, DateTime.Now.ToString("yyMMddHHmm")); } }
文件隊列處理工具