文件队列处理工具
Posted krockey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件队列处理工具相关的知识,希望对你有一定的参考价值。
文件队列
写了一个文件队列处理的小工具。
/// <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"));
}
}
以上是关于文件队列处理工具的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 数据库 - 使用UEStudio修改dmp文件版本号,解决imp命令恢复的数据库与dmp本地文件版本号不匹配导致的导入失败问题,“ORACLE error 12547”问题处理(代码片段