c#文件助手类分享(读取文件内容 操作日志文件)
发布时间:2023-05-25 10:32:54
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using System.Linq;
using System.Runtime.InteropServices;
namespace Humep.FileWatcher
{
/// <summary>
/// 日志文件操作
/// Date:2011-06-01
/// </summary>
public static class FileHelper
{
/// <summary>
/// 获取文件路径中最后的目录名
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static string GetDirectoryName(string fullName)
{
if (string.IsNullOrWhiteSpace(fullName))
{
return null;
}
return fullName.Substring(0,fullName.LastIndexOf('\\')+1);
}
/// <summary>
/// 获取路径中的文件名称
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static string GetFileName(string filePath)
{
if (string.IsNullOrWhiteSpace(filePath))
{
return string.Empty;
}
if (filePath.Length > 260)
{
return filePath.Substring(filePath.LastIndexOf('\\') + 1, int.MaxValue);
}
return Path.GetFileName(filePath);
}
/// <summary>
/// 文件名是否满足filePattern格式。
/// </summary>
/// <param name="fileName"></param>
public static bool IsMatched(string fileName, string filePattern)
{
if (string.IsNullOrWhiteSpace(fileName))
{
return false;
}
if (string.IsNullOrWhiteSpace(filePattern))
{
return false;
}
Regex regex = new Regex(filePattern, RegexOptions.IgnoreCase);
return regex.IsMatch(fileName);
}
/// <summary>
/// 读取文件内容
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
public static string ReadAllText(string filePath)
{
if (string.IsNullOrWhiteSpace(filePath) || File.Exists(filePath) == false)
{
return string.Empty;
}
return File.ReadAllText(filePath);
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="filePath"></param>
public static bool Delete(string filePath)
{
if (string.IsNullOrWhiteSpace(filePath))
{
return false;
}
if (!File.Exists(filePath))
{
return false;
}
File.Delete(filePath);
return !File.Exists(filePath);
}
/// <summary>
/// 删除目录下所有过期文件
/// </summary>
/// <param name="directory"></param>
/// <param name="expiredDays"></param>
public static int ClearExpiredFiles(string directory, int expiredDays)
{
if (!Directory.Exists(directory))
{
return 0;
}
if (expiredDays <= 0)
{
return 0;
}
DirectoryInfo dir = new DirectoryInfo(directory);
IList<FileInfo> fileInfos =dir.GetFiles();
if (fileInfos == null || fileInfos.Count < 1)
{
return 0;
}
int count = 0;
foreach (FileInfo fileInfo in fileInfos)
{
if (fileInfo.CreationTime.AddDays(expiredDays) < DateTime.Now)
{
//added by yangbinggang
fileInfo.Attributes = FileAttributes.Normal;
FileHelper.Delete(fileInfo.FullName);
count = count + 1;
}
}
return count;
}
/// <summary>
/// 删除目录下所有过期文件
/// </summary>
/// <param name="dirs">目录数组</param>
/// <param name="expiredDays"></param>
/// <returns></returns>
public static int ClearExpiredFiles(string[] dirs, int expiredDays)
{
if (dirs == null)
{
return 0;
}
if (dirs.Length <= 0)
{
return 0;
}
int count = 0;
foreach (string dir in dirs)
{
count = count + ClearExpiredFiles(dir, expiredDays);
}
return count;
}
/// <summary>
/// 删除过期目录及其子目录和文件
/// </summary>
/// <param name="directories">目录数组</param>
/// <param name="expiredDays"></param>
/// <returns></returns>
public static int ClearExpiredDirectories(string[] directories, int expiredDays)
{
if (directories == null || directories.Length <= 0)
{
return 0;
}
if (expiredDays < 0)
{
return 0;
}
int count = 0;
foreach (string directory in directories)
{
if (!Directory.Exists(directory))
{
continue;
}
count += ClearExpiredFiles(directory, expiredDays);
DirectoryInfo directoryInfo = new DirectoryInfo(directory);
if (directoryInfo.CreationTime.AddDays(expiredDays) < DateTime.Now)
{
directoryInfo.Attributes = FileAttributes.Normal;
Directory.Delete(directory, true);
}
}
return count;
}
/// <summary>
/// 深度枚举出所有子目录(包括子目录的子目录)
/// </summary>
/// <param name="directory"></param>
/// <returns></returns>
public static IList<string> EnumerateAllSubDirectories(string directory)
{
List<string> direcotryList = new List<string>();
if (string.IsNullOrWhiteSpace(directory))
{
return direcotryList;
}
if (!Directory.Exists(directory))
{
return direcotryList;
}
string[] folders = Directory.GetDirectories(directory);
direcotryList.AddRange(folders);
foreach (string folder in folders)
{
direcotryList.AddRange(EnumerateAllSubDirectories(folder));
}
return direcotryList;
}
/// <summary>
/// 根据时间查询文件
/// </summary>
/// <param name="directory"></param>
/// <param name="maxCount"></param>
/// <returns></returns>
public static IList<string> FindFiles(string directory, int maxCount, int days)
{
IList<string> fileList = new List<string>();
if (!Directory.Exists(directory) || maxCount <= 0)
{
return fileList;
}
string[] files = Directory.GetFiles(directory);
if(files==null)
{
return fileList;
}
//modified by yangbinggang 2012-12-10 DTS2012121004132\DTS2012121004404\DTS2012121004291
DateTime lastTime = DateTime.Now.AddDays(-Math.Abs(days));
fileList = files.Where(item =>
{
if (maxCount <= 0)
{
return false;
}
FileInfo fileInfo = new FileInfo(item);
if (fileInfo.LastWriteTime >= lastTime)
{
maxCount--;
return true;
}
return false;
}).ToList<string>();
return fileList;
}
/// <summary>
/// 查询目录下的所有文件,将recursive设为True可查询子目录中的所有文件。
/// </summary>
/// <param name="directory"></param>
/// <param name="filePattern"></param>
/// <param name="maxCount"></param>
/// <param name="recursive"></param>
/// <returns></returns>
public static IList<FileInfo> FindFiles(string directory, string filePattern, int maxCount, bool recursive)
{
if (!recursive)
{
return FileHelper.FindFiles(directory, filePattern, maxCount);
}
IList<string> directories = EnumerateAllSubDirectories(directory);
return FindFiles(directories,filePattern, maxCount);
}
public static IList<FileInfo> FindFiles(IList<string> directories,string filePattern, int maxCount)
{
List<FileInfo> files = new List<FileInfo>();
foreach (string directoryItem in directories)
{
files.AddRange(FileHelper.FindFiles(directoryItem, filePattern, maxCount));
if (files.Count > maxCount)
{
break;
}
}
return files.GetRange(0, Math.Min(files.Count, maxCount));
}
/// <summary>
/// 默认查找20个文件
/// </summary>
/// <param name="directory"></param>
/// <param name="filePattern"></param>
/// <returns></returns>
public static IList<FileInfo> FindFiles(string directory, string filePattern)
{
int maxCount = 20;
return FindFiles(directory, filePattern, maxCount);
}
/// <summary>
/// 获取文件
/// </summary>
/// <param name="directory"></param>
/// <param name="filePattern"></param>
/// <returns></returns>
public static IList<FileInfo> FindFiles(string directory, string filePattern, int maxCount)
{
List<FileInfo> matchedFiles = new List<FileInfo>();
IList<FileInfo> fileInfos = FindAllFiles(directory);
if (string.IsNullOrWhiteSpace(filePattern))
{
return matchedFiles;
}
if (maxCount < 0 || maxCount > fileInfos.Count)
{
maxCount = fileInfos.Count;
}
maxCount--;
foreach (var fileInfo in fileInfos)
{
if (maxCount <0)
{
break;
}
if (FileHelper.IsMatched(fileInfo.Name, filePattern))
{
matchedFiles.Add(fileInfo);
}
maxCount--;
}
return matchedFiles;
}
/// <summary>
///
/// </summary>
/// <param name="directory"></param>
/// <param name="filePattern"></param>
/// <returns></returns>
public static IList<FileInfo> FindAllFiles(string directory)
{
IList<FileInfo> fileInfos = new List<FileInfo>();
if (string.IsNullOrWhiteSpace(directory))
{
return fileInfos;
}
if (!Directory.Exists(directory))
{
return fileInfos;
}
DirectoryInfo dir = new DirectoryInfo(directory);
fileInfos = dir.GetFiles();
return fileInfos;
}
/// <summary>
/// 单个文件移动
/// </summary>
/// <param name="sourcePath"></param>
/// <param name="targetDirectory"></param>
/// <returns></returns>
public static bool MoveFile(string sourcePath, string targetDirectory)
{
if (!File.Exists(sourcePath))
{
return false;
}
if (!Directory.Exists(targetDirectory))
{
return false;
}
var targetPath = string.Format("{0}\\{1}", targetDirectory, FileHelper.GetFileName(sourcePath));
while (File.Exists(targetPath))
{
targetPath = FileHelper.Rename(targetPath);
}
if (sourcePath.Length > 260 || targetPath.Length > 260)
{
return MoveLongPathFile(@"\\?\"+sourcePath,@"\\?\"+ targetPath);
}
File.Move(sourcePath, targetPath);
return true;
}
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true, EntryPoint = "MoveFile")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool MoveLongPathFile(string lpExistingFileName, string lpNewFileName);
/// <summary>
/// 单个文件移动
/// </summary>
/// <param name="fileName"></param>
/// <param name="sourceDirectory"></param>
/// <param name="targetDirectory"></param>
/// <returns></returns>
public static bool MoveFile(string fileName, string sourceDirectory, string targetDirectory)
{
if (!File.Exists(fileName))
{
return false;
}
if (!Directory.Exists(sourceDirectory))
{
return false;
}
if (!Directory.Exists(targetDirectory))
{
return false;
}
string filePath = fileName.Replace(sourceDirectory, targetDirectory);
string fileDir=Path.GetDirectoryName(filePath);
if(!DirectoryHelper.CreateDirectory(fileDir))
{
return false;
}
return MoveFile(fileName, fileDir);
}
/// <summary>
/// 重新生成新的文件路径
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static string Rename(string filePath)
{
if (string.IsNullOrWhiteSpace(filePath))
{
return string.Empty;
}
string lastFileName = Path.GetFileNameWithoutExtension(filePath);
string lastFileExtension = Path.GetExtension(filePath);
//重命名,则随机在原来文件名后面加几个随机数字进行组装成新的名字
Random random = new Random(System.DateTime.Now.Millisecond);
string randomData = random.Next().ToString();
//把原文件名的名字加上随机数,组装成新的文件名(避免重名)
string newFileName = lastFileName + randomData;
return Path.GetDirectoryName(filePath) + "\\" + newFileName + lastFileExtension;
}
}
}


猜你喜欢
- 本文实例讲述了C#实现两接口中同名方法。分享给大家供大家参考。具体分析如下:对于一个类实现两个接口,而这两个接口又有同名方法,C#中的处理方
- 介绍:unity界面开发,会用到很多导航的按钮,他们是公共的,单击其中一个按钮,显示对应的界面。unity中,UGUI自带Toggle组件,
- 同步日志的业务流程处理和日志打印是在同一个线程,日志打印的过程实际上是写文件IO的过程,这个过程是相对耗时的,并且会阻塞主线程的执行,只有日
- 最近学习JavaFx,发现网上大概只有官方文档可以查阅,学习资料较少,写个拼图游戏供记录。。大概说一下思路:1.面板的构建:面板采用Grid
- 一:背景1. 讲故事每次项目预交付的时候,总会遇到各种奇葩的坑,我觉得有必要梳理一下以及如何快速解决的,让后来人避避坑,这篇就聊聊自己的所闻
- java web返回中文乱码ajax返回中文乱码问题 在浏览器按F12查看数据包可以看到charset为 iso-8859-1,这是spri
- 问题描述通过FeignClient调用微服务提供的分页对象IPage报错{"message": "Type d
- 本文实例讲述了java读取properties配置文件的方法。分享给大家供大家参考。具体分析如下:这两天做java项目,用到属性文件,到网上
- 本文实例讲述了C#中派生类调用基类构造函数用法。分享给大家供大家参考。具体分析如下:这里的默认构造函数是指在没有编写构造函数的情况下系统默认
- 最近在研究断点下载(下载续传)的功能,此功能需要服务端和客户端进行对接编写,本篇也是记录一下关于贴上关于实现服务端(Spring Boot)
- classpath读取resources目录下文件最近在springboot+maven的项目中去读取资源文件的时候,报了找不到文件的错误。
- 大家都知道在C#里面,我们可以使用Thread.Start方法来启动一个线程,当我们想停止执行的线程时可以使用Thread.Abort方法来
- 一、问题来源项目中遇到 json 模型映射成 RadialGradient 组件的需求,其他参数正常传递即可;唯独 radius 参数效果有
- LiveData简介在日常安卓开发中,一些耗时的 * 如列网络请求,数据库读写都不能在主线程执行,必须开一条子线程去执行这些耗时操作,但我们往
- 要想实现android手机通过扫描名片,得到名片信息,可以使用脉可寻提供的第三方SDK,即Maketion ScanCard SDK,脉可寻
- 想要制作一个简易的登录界面非常容易,总体上来说就是UI布局、给定id、新建跳转的页面、以及输入账号密码的获取与判断,那么接下来就开始制作吧!
- 目前只实现了java生成的固定的uuid:85bb94b8-fd4b-4e1c-8f49-3cedd49d8f28的序列化package m
- 获取最新插入数据的id原始方法读取最后一条的插入数据,但这样会造成如果两条数据同时插入,会并发出现错误SELECT * FROM admin
- Java Resource路径首先一点很重要,Java中不存在标准的相对路径,各种相对路径取资源的方式都是基于某种规则转化为绝
- 算法介绍概念 TF-IDF(term frequency–inverse document