.net Core FileHelper

文件帮助类:

在开发中我们时常会遇到需要对文件进行操作的情况,下面是我常用的文件帮助类,希望能帮助到各位骚棒,贴出来也方便我自己后面copy.


问题描述

文件操作帮助类

public class FileHelper
{
	#region 获取文件到集合中

	/// <summary>
	/// 读取指定位置文件列表到集合中
	/// </summary>
	/// <param name="path">指定路径</param>
	/// <returns></returns>
	public static DataTable GetFileTable(string path)
	{
		DataTable dt = new DataTable();
		dt.Columns.Add("name", typeof(string));
		dt.Columns.Add("ext", typeof(string));
		dt.Columns.Add("size", typeof(long));
		dt.Columns.Add("time", typeof(DateTime));

		if (Directory.Exists(path))
		{
			DirectoryInfo dirinfo = new DirectoryInfo(path);
			FileInfo fi;
			DirectoryInfo dir;
			string FileName, FileExt;
			long FileSize = 0;
			DateTime FileModify;
			try
			{
				foreach (FileSystemInfo fsi in dirinfo.GetFileSystemInfos())
				{
					FileName = string.Empty;
					FileExt = string.Empty;
					if (fsi is FileInfo)
					{
						fi = (FileInfo)fsi;
						//获取文件名称
						FileName = fi.Name;
						//获取文件扩展名
						FileExt = fi.Extension;
						//获取文件大小
						FileSize = fi.Length;
						//获取文件最后修改时间
						FileModify = fi.LastWriteTime;
					}
					else
					{
						dir = (DirectoryInfo)fsi;
						//获取目录名
						FileName = dir.Name;
						//获取目录最后修改时间
						FileModify = dir.LastWriteTime;
						//设置目录文件为文件夹
						FileExt = "文件夹";
					}
					DataRow dr = dt.NewRow();
					dr["name"] = FileName;
					dr["ext"] = FileExt;
					dr["size"] = FileSize;
					dr["time"] = FileModify;
					dt.Rows.Add(dr);
				}
			}
			catch
			{
				throw;
			}
		}
		return dt;
	}

	#endregion 获取文件到集合中

	#region 检测指定路径是否存在

	/// <summary>
	/// 检测指定路径是否存在
	/// </summary>
	/// <param name="path">目录的绝对路径</param>
	public static bool IsExistDirectory(string path)
	{
		return Directory.Exists(path);
	}

	#endregion 检测指定路径是否存在

	#region 检测指定文件是否存在,如果存在则返回true

	/// <summary>
	/// 检测指定文件是否存在,如果存在则返回true
	/// </summary>
	/// <param name="filePath">文件的绝对路径</param>
	public static bool IsExistFile(string filePath)
	{
		return File.Exists(filePath);
	}

	#endregion 检测指定文件是否存在,如果存在则返回true

	#region 创建文件夹

	/// <summary>
	/// 创建文件夹
	/// </summary>
	/// <param name="folderPath">文件夹的绝对路径</param>
	public static void CreateFolder(string folderPath)
	{
		if (!IsExistDirectory(folderPath))
		{
			Directory.CreateDirectory(folderPath);
		}
	}

	#endregion 创建文件夹

	#region 判断上传文件后缀名

	/// <summary>
	/// 判断上传文件后缀名
	/// </summary>
	/// <param name="strExtension">后缀名</param>
	public static bool IsCanEdit(string strExtension)
	{
		strExtension = strExtension.ToLower();
		if (strExtension.LastIndexOf(".", StringComparison.Ordinal) >= 0)
		{
			strExtension = strExtension.Substring(strExtension.LastIndexOf(".", StringComparison.Ordinal));
		}
		else
		{
			strExtension = ".txt";
		}
		string[] strArray = new string[] { ".htm", ".html", ".txt", ".js", ".css", ".xml", ".sitemap" };
		for (int i = 0; i < strArray.Length; i++)
		{
			if (strExtension.Equals(strArray[i]))
			{
				return true;
			}
		}
		return false;
	}

	public static bool IsSafeName(string strExtension)
	{
		strExtension = strExtension.ToLower();
		if (strExtension.LastIndexOf(".") >= 0)
		{
			strExtension = strExtension.Substring(strExtension.LastIndexOf("."));
		}
		else
		{
			strExtension = ".txt";
		}
		string[] strArray = new string[] { ".jpg", ".gif", ".png" };
		for (int i = 0; i < strArray.Length; i++)
		{
			if (strExtension.Equals(strArray[i]))
			{
				return true;
			}
		}
		return false;
	}

	public static bool IsZipName(string strExtension)
	{
		strExtension = strExtension.ToLower();
		if (strExtension.LastIndexOf(".") >= 0)
		{
			strExtension = strExtension.Substring(strExtension.LastIndexOf("."));
		}
		else
		{
			strExtension = ".txt";
		}
		string[] strArray = new string[] { ".zip", ".rar" };
		for (int i = 0; i < strArray.Length; i++)
		{
			if (strExtension.Equals(strArray[i]))
			{
				return true;
			}
		}
		return false;
	}

	#endregion 判断上传文件后缀名

	#region 创建文件夹

	/// <summary>
	/// 创建文件夹
	/// </summary>
	/// <param name="fileName">文件的绝对路径</param>
	public static void CreateSuffic(string fileName)
	{
		try
		{
			if (!Directory.Exists(fileName))
			{
				Directory.CreateDirectory(fileName);
			}
		}
		catch (Exception)
		{
			throw;
		}
	}

	/// <summary>
	/// 创建文件夹
	/// </summary>
	/// <param name="fileName">文件的绝对路径</param>
	public static void CreateFiles(string fileName)
	{
		try
		{
			//判断文件是否存在,不存在创建该文件
			if (!IsExistFile(fileName))
			{
				FileInfo file = new FileInfo(fileName);
				FileStream fs = file.Create();
				fs.Close();
			}
		}
		catch (Exception ex)
		{
			LogHelper.WriteWithTime(ex);
		}
	}

	#region 创建文本文件

	/// <summary>
	/// 创建文件
	/// </summary>
	/// <param name="path"></param>
	/// <param name="content"></param>
	public static void CreateFile(string path, string content)
	{
		if (!Directory.Exists(Path.GetDirectoryName(path)))
		{
			Directory.CreateDirectory(Path.GetDirectoryName(path));
		}
		using (StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8))
		{
			sw.Write(content);
		}
	}

	#endregion 创建文本文件

	/// <summary>
	/// 创建一个文件,并将字节流写入文件。
	/// </summary>
	/// <param name="filePath">文件的绝对路径</param>
	/// <param name="buffer">二进制流数据</param>
	public static void CreateFile(string filePath, byte[] buffer)
	{
		try
		{
			//判断文件是否存在,不存在创建该文件
			if (!IsExistFile(filePath))
			{
				FileInfo file = new FileInfo(filePath);
				FileStream fs = file.Create();
				fs.Write(buffer, 0, buffer.Length);
				fs.Close();
			}
			else
			{
				File.WriteAllBytes(filePath, buffer);
			}
		}
		catch (Exception ex)
		{
			LogHelper.WriteWithTime(ex);
		}
	}

	#endregion 创建文件夹

	#region 将文件移动到指定目录

	/// <summary>
	/// 将文件移动到指定目录
	/// </summary>
	/// <param name="sourceFilePath">需要移动的源文件的绝对路径</param>
	/// <param name="descDirectoryPath">移动到的目录的绝对路径</param>
	public static void Move(string sourceFilePath, string descDirectoryPath)
	{
		string sourceName = GetFileName(sourceFilePath);
		if (IsExistDirectory(descDirectoryPath))
		{
			//如果目标中存在同名文件,则删除
			if (IsExistFile(descDirectoryPath + "\\" + sourceFilePath))
			{
				DeleteFile(descDirectoryPath + "\\" + sourceFilePath);
			}
			else
			{
				//将文件移动到指定目录
				File.Move(sourceFilePath, descDirectoryPath + "\\" + sourceFilePath);
			}
		}
	}

	#endregion 将文件移动到指定目录

	#region 将源文件的内容复制到目标文件中

	/// <summary>
	/// 将源文件的内容复制到目标文件中
	/// </summary>
	/// <param name="sourceFilePath">源文件的绝对路径</param>
	/// <param name="descDirectoryPath">目标文件的绝对路径</param>
	public static void Copy(string sourceFilePath, string descDirectoryPath)
	{
		File.Copy(sourceFilePath, descDirectoryPath, true);
	}

	#endregion 将源文件的内容复制到目标文件中

	#region 从文件的绝对路径中获取文件名( 不包含扩展名 )

	/// <summary>
	/// 从文件的绝对路径中获取文件名( 不包含扩展名 )
	/// </summary>
	/// <param name="filePath">文件的绝对路径</param>
	public static string GetFileName(string filePath)
	{
		FileInfo file = new FileInfo(filePath);
		return file.Name;
	}

	#endregion 从文件的绝对路径中获取文件名( 不包含扩展名 )

	#region 获取文件的后缀名

	/// <summary>
	/// 获取文件的后缀名
	/// </summary>
	/// <param name="filePath">文件的绝对路径</param>
	public static string GetExtension(string filePath)
	{
		FileInfo file = new FileInfo(filePath);
		return file.Extension;
	}

	/// <summary>
	/// 返回文件扩展名,不含“.”
	/// </summary>
	/// <param name="filepath">文件全名称</param>
	/// <returns>string</returns>
	public static string GetFileExt(string filepath)
	{
		if (string.IsNullOrEmpty(filepath))
		{
			return "";
		}
		if (filepath.LastIndexOf(".", StringComparison.Ordinal) > 0)
		{
			return filepath.Substring(filepath.LastIndexOf(".", StringComparison.Ordinal) + 1); //文件扩展名,不含“.”
		}
		return "";
	}

	#endregion 获取文件的后缀名

	#region 删除指定文件

	/// <summary>
	/// 删除指定文件
	/// </summary>
	/// <param name="filePath">文件的绝对路径</param>
	public static void DeleteFile(string filePath)
	{
		if (IsExistFile(filePath))
		{
			File.Delete(filePath);
		}
	}

	#endregion 删除指定文件

	#region 删除指定目录及其所有子目录

	/// <summary>
	/// 删除指定目录及其所有子目录
	/// </summary>
	/// <param name="directoryPath">文件的绝对路径</param>
	public static void DeleteDirectory(string directoryPath)
	{
		if (IsExistDirectory(directoryPath))
		{
			Directory.Delete(directoryPath);
		}
	}

	#endregion 删除指定目录及其所有子目录

	#region 清空指定目录下所有文件及子目录,但该目录依然保存.

	/// <summary>
	/// 清空指定目录下所有文件及子目录,但该目录依然保存.
	/// </summary>
	/// <param name="directoryPath">指定目录的绝对路径</param>
	public static void ClearDirectory(string directoryPath)
	{
		if (!IsExistDirectory(directoryPath)) return;
		//删除目录中所有的文件
		string[] fileNames = GetFileNames(directoryPath);
		for (int i = 0; i < fileNames.Length; i++)
		{
			DeleteFile(fileNames[i]);
		}
		//删除目录中所有的子目录
		string[] directoryNames = GetDirectories(directoryPath);
		for (int i = 0; i < directoryNames.Length; i++)
		{
			DeleteDirectory(directoryNames[i]);
		}
	}

	#endregion 清空指定目录下所有文件及子目录,但该目录依然保存.

	#region 剪切  粘贴

	/// <summary>
	/// 剪切文件
	/// </summary>
	/// <param name="source">原路径</param>
	/// <param name="destination">新路径</param>
	public bool FileMove(string source, string destination)
	{
		bool ret = false;
		FileInfo file_s = new FileInfo(source);
		FileInfo file_d = new FileInfo(destination);
		if (file_s.Exists)
		{
			if (!file_d.Exists)
			{
				file_s.MoveTo(destination);
				ret = true;
			}
		}
		if (ret == true)
		{
			//Response.Write("<script>alert('剪切文件成功!');</script>");
		}
		else
		{
			//Response.Write("<script>alert('剪切文件失败!');</script>");
		}
		return ret;
	}

	#endregion 剪切  粘贴

	#region 检测指定目录是否为空

	/// <summary>
	/// 检测指定目录是否为空
	/// </summary>
	/// <param name="directoryPath">指定目录的绝对路径</param>
	public static bool IsEmptyDirectory(string directoryPath)
	{
		try
		{
			//判断文件是否存在
			string[] fileNames = GetFileNames(directoryPath);
			if (fileNames.Length > 0)
			{
				return false;
			}
			//判断是否存在文件夹
			string[] directoryNames = GetDirectories(directoryPath);
			if (directoryNames.Length > 0)
			{
				return false;
			}
			return true;
		}
		catch (Exception)
		{
			return true;
		}
	}

	#endregion 检测指定目录是否为空

	#region 获取指定目录中所有文件列表

	/// <summary>
	/// 获取指定目录中所有文件列表
	/// </summary>
	/// <param name="directoryPath">指定目录的绝对路径</param>
	public static string[] GetFileNames(string directoryPath)
	{
		if (!IsExistDirectory(directoryPath))
		{
			throw new FileNotFoundException();
		}
		return Directory.GetFiles(directoryPath);
	}

	#endregion 获取指定目录中所有文件列表

	#region 获取指定目录中的子目录列表

	/// <summary>
	/// 获取指定目录中所有子目录列表,若要搜索嵌套的子目录列表,请使用重载方法
	/// </summary>
	/// <param name="directoryPath">指定目录的绝对路径</param>
	public static string[] GetDirectories(string directoryPath)
	{
		return Directory.GetDirectories(directoryPath);
	}

	/// <summary>
	/// 获取指定目录及子目录中所有子目录列表
	/// </summary>
	/// <param name="directoryPath">指定目录的绝对路径</param>
	/// <param name="searchPattern">模式字符串,"*"代表0或N个字符,"?"代表1个字符。
	/// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。</param>
	/// <param name="isSearchChild">是否搜索子目录</param>
	public static string[] GetDirectories(string directoryPath, string searchPattern, bool isSearchChild)
	{
		if (isSearchChild)
		{
			return Directory.GetDirectories(directoryPath, searchPattern, SearchOption.AllDirectories);
		}
		else
		{
			return Directory.GetDirectories(directoryPath, searchPattern, SearchOption.TopDirectoryOnly);
		}
	}

	#endregion 获取指定目录中的子目录列表

	#region 获取一个文件的长度

	/// <summary>
	/// 获取一个文件的长度,单位为Byte
	/// </summary>
	/// <param name="filePath">文件的绝对路径</param>
	public static int GetFileSize(string filePath)
	{
		//创建一个文件对象
		FileInfo fi = new FileInfo(filePath);
		//获取文件的大小
		return (int)fi.Length;
	}

	/// <summary>
	/// 获取一个文件的长度,单位为KB
	/// </summary>
	/// <param name="filePath">文件的路径</param>
	public static double GetFileSizeByKb(string filePath)
	{
		//创建一个文件对象
		FileInfo fi = new FileInfo(filePath);
		//获取文件的大小
		return Math.Round(Convert.ToDouble(filePath.Length) / 1024, 2);// ConvertHelper.ToDouble(ConvertHelper.ToDouble(fi.Length) / 1024, 1);
	}

	/// <summary>
	/// 获取一个文件的长度,单位为MB
	/// </summary>
	/// <param name="filePath">文件的路径</param>
	public static double GetFileSizeByMb(string filePath)
	{
		//创建一个文件对象
		FileInfo fi = new FileInfo(filePath);
		//获取文件的大小
		return Math.Round(Convert.ToDouble(Convert.ToDouble(fi.Length) / 1024 / 1024), 2);
	}

	#endregion 获取一个文件的长度

	#region 获取文件大小并以B,KB,GB,TB

	/// <summary>
	/// 计算文件大小函数(保留两位小数),Size为字节大小
	/// </summary>
	/// <param name="size">初始文件大小</param>
	/// <returns></returns>
	public static string ToFileSize(long size)
	{
		string m_strSize = "";
		long FactSize = 0;
		FactSize = size;
		if (FactSize < 1024.00)
			m_strSize = FactSize.ToString("F2") + " 字节";
		else if (FactSize >= 1024.00 && FactSize < 1048576)
			m_strSize = (FactSize / 1024.00).ToString("F2") + " KB";
		else if (FactSize >= 1048576 && FactSize < 1073741824)
			m_strSize = (FactSize / 1024.00 / 1024.00).ToString("F2") + " MB";
		else if (FactSize >= 1073741824)
			m_strSize = (FactSize / 1024.00 / 1024.00 / 1024.00).ToString("F2") + " GB";
		return m_strSize;
	}

	#endregion 获取文件大小并以B,KB,GB,TB

	#region 将文件读取到字符串中

	/// <summary>
	/// 将文件读取到字符串中
	/// </summary>
	/// <param name="filePath">文件的绝对路径</param>
	public static string FileToString(string filePath)
	{
		return FileToString(filePath, Encoding.UTF8);
	}

	/// <summary>
	/// 将文件读取到字符串中
	/// </summary>
	/// <param name="filePath">文件的绝对路径</param>
	/// <param name="encoding">字符编码</param>
	public static string FileToString(string filePath, Encoding encoding)
	{
		//创建流读取器
		StreamReader reader = new StreamReader(filePath, encoding);
		try
		{
			//读取流
			return reader.ReadToEnd();
		}
		finally
		{
			//关闭流读取器
			reader.Close();
		}
	}

	#endregion 将文件读取到字符串中

	#region 判断文件

	// 判断文件是否是bai图片
	public static bool IsPicture(string fileName)
	{
		string strFilter = ".jpeg|.gif|.jpg|.png|.bmp|.pic|.tiff|.ico|.iff|.lbm|.mag|.mac|.mpt|.opt|";
		char[] separtor = { '|' };
		string[] tempFileds = StringSplit(strFilter, separtor);
		foreach (string str in tempFileds)
		{
			if (str.ToUpper() == fileName.Substring(fileName.LastIndexOf("."), fileName.Length - fileName.LastIndexOf(".")).ToUpper()) { return true; }
		}
		return false;
	}

	// 判断文件是否是excle
	public static bool IsExcel(string fileName)
	{
		string strFilter = ".xls|.xlsx|.csv";
		char[] separtor = { '|' };
		string[] tempFileds = StringSplit(strFilter, separtor);
		foreach (string str in tempFileds)
		{
			if (str.ToUpper() == fileName.Substring(fileName.LastIndexOf("."), fileName.Length - fileName.LastIndexOf(".")).ToUpper()) { return true; }
		}
		return false;
	}

	// 通过字符串,分隔符返回zhistring[]数组 
	public static string[] StringSplit(string s, char[] separtor)
	{
		string[] tempFileds = s.Trim().Split(separtor); return tempFileds;
	}

    #endregion 判断文件

    #region 文件压缩与解压
	/// <summary>
	/// 压缩文件
	/// </summary>
	/// <param name="sourceFilePath">文件路径</param>
	/// <param name="zipFilePath">压缩包保存路径</param>
    public static void ZipFile(string sourceFilePath, string zipFilePath)
    {
        System.IO.Compression.ZipFile.CreateFromDirectory(sourceFilePath, zipFilePath);
        // 创建并添加被压缩文件
        using (FileStream zipFileToOpen = new FileStream(sourceFilePath, FileMode.Create))
        {
            using (ZipArchive archive = new ZipArchive(zipFileToOpen, ZipArchiveMode.Create))
            {
                string filename = System.IO.Path.GetFileName(zipFilePath);
                ZipArchiveEntry readMeEntry = archive.CreateEntry(filename);
                using (System.IO.Stream stream = readMeEntry.Open())
                {
                    byte[] bytes = System.IO.File.ReadAllBytes(zipFilePath);
                    stream.Write(bytes, 0, bytes.Length);
                }
            }
        }
    }
    /// <summary>
    /// 在压缩文件中添加文件
    /// </summary>
    /// <param name="sourceFilePath">文件路径</param>
    /// <param name="zipFilePath">压缩包保存路径</param>
    public static void AddZipFile(string sourceFilePath, string zipFilePath)
    {
        using (FileStream zipFileToOpen = new FileStream(zipFilePath, FileMode.Create))
        {
            using (ZipArchive archive = new ZipArchive(zipFileToOpen, ZipArchiveMode.Create))
            {
                string filename = System.IO.Path.GetFileName(sourceFilePath);
                ZipArchiveEntry readMeEntry = archive.CreateEntry(filename);
                using (System.IO.Stream stream = readMeEntry.Open())
                {
                    byte[] bytes = System.IO.File.ReadAllBytes(sourceFilePath);
                    stream.Write(bytes, 0, bytes.Length);
                }
            }
        }

    }
    /// <summary>
    /// 解压压缩文件
    /// </summary>
    /// <param name="zipFilePath">压缩包路径</param>
    /// <param name="unzipFilePath">解压后文件保存路径</param>
    public static void UzipFile(string zipFilePath, string unzipFilePath)
    {
        using (FileStream instream = File.OpenRead(zipFilePath))
        {
            using (ZipArchive zip = new ZipArchive(instream))
            {

                foreach (ZipArchiveEntry et in zip.Entries)
                {
                    using (Stream stream = et.Open())
                    {
                        using (FileStream fsout = File.Create(System.IO.Path.Combine(unzipFilePath, et.Name)))
                        {
                            stream.CopyTo(fsout);
                        }
                    }
                }
            }
        }
    }



    #endregion
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

或与且与或非

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值