123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- using System.Data;
- namespace Ant.Service.Common
- {
- /// <summary>
- /// 文件帮助类
- /// add 作者: 季健国 QQ:181589805 by 2016-06-11
- /// </summary>
- 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(string));
- dt.Columns.Add("time",typeof(DateTime));
-
- DirectoryInfo dirinfo = new DirectoryInfo(Path);
- FileInfo fi;
- DirectoryInfo dir;
- string FileName = string.Empty, FileExt = string.Empty, FileSize = string.Empty;
- DateTime FileModify;
- try
- {
- foreach (FileSystemInfo fsi in dirinfo.GetFileSystemInfos())
- {
- if (fsi is FileInfo)
- {
- fi = (FileInfo)fsi;
- //获取文件名称
- FileName = fi.Name;
- //获取文件扩展名
- FileExt = fi.Extension;
- //获取文件大小
- FileSize = GetDiyFileSize(fi);
- //获取文件最后修改时间
- 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
- #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(".") >= 0)
- {
- strExtension = strExtension.Substring(strExtension.LastIndexOf("."));
- }
- 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 ex)
- {
- throw ex;
- }
- }
- /// <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)
- {
- throw ex;
- }
- }
- /// <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)
- {
- throw 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
- /// <summary>
- /// 将源文件的内容复制到目标文件中
- /// </summary>
- /// <param name="sourceFilePath">源文件的绝对路径</param>
- /// <param name="descDirectoryPath">目标文件的绝对路径</param>
- public static void Copy(string sourceFilePath, string descDirectoryPath)
- {
- File.Copy(sourceFilePath, descDirectoryPath, true);
- }
- /// <summary>
- /// 从文件的绝对路径中获取文件名( 不包含扩展名 )
- /// </summary>
- /// <param name="filePath">文件的绝对路径</param>
- public static string GetFileName(string filePath)
- {
- FileInfo file = new FileInfo(filePath);
- return file.Name;
- }
- /// <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>
- public static void DeleteFile(string filePath)
- {
- if (IsExistFile(filePath))
- {
- File.Delete(filePath);
- }
- }
- /// <summary>
- /// 删除指定目录及其所有子目录
- /// </summary>
- /// <param name="directoryPath">文件的绝对路径</param>
- public static void DeleteDirectory(string directoryPath)
- {
- if (IsExistDirectory(directoryPath))
- {
- Directory.Delete(directoryPath);
- }
- }
- /// <summary>
- /// 清空指定目录下所有文件及子目录,但该目录依然保存.
- /// </summary>
- /// <param name="directoryPath">指定目录的绝对路径</param>
- public static void ClearDirectory(string directoryPath)
- {
- if (IsExistDirectory(directoryPath))
- {
- //删除目录中所有的文件
- 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]);
- }
- }
- }
- #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
- /// <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 ex)
- {
- return true;
- }
- }
- #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)
- {
- try
- {
- return Directory.GetDirectories(directoryPath);
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
- /// <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)
- {
- try
- {
- if (isSearchChild)
- {
- return Directory.GetDirectories(directoryPath, searchPattern, SearchOption.AllDirectories);
- }
- else
- {
- return Directory.GetDirectories(directoryPath,searchPattern, SearchOption.TopDirectoryOnly);
- }
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
- #endregion
- #region 获取一个文件的长度
- /// <summary>
- /// 获取文件长度,返回字符串 byte kb mb gb
- /// </summary>
- public static string GetDiyFileSize(FileInfo fi)
- {
- string FileSize = string.Empty;
- //获取文件大小
- if (fi.Length < 1024)//小于1KB
- {
- FileSize = fi.Length.ToString() + "byte";
- }
- else if (fi.Length > 1024 && fi.Length < 1024 * 1024)//大于1KB小于1MB
- {
- FileSize = Math.Round(GetFileSizeByKB(fi.Length), 2).ToString() + "KB";
- }
- else if (fi.Length > 1024 * 1024 && fi.Length < 1024 * 1024 * 1024)//大于1MB小于1GB
- {
- FileSize = Math.Round(GetFileSizeByMB(fi.Length), 2).ToString() + "MB";
- }
- else //GB
- {
- FileSize = Math.Round(GetFileSizeByGB(fi.Length), 2).ToString() + "GB";
- }
- return FileSize;
- }
- public static decimal GetDiyFileSize(long Length,out string unit)
- {
- decimal FileSize = 0m;
- unit = string.Empty;
- //获取文件大小
- if (Length < 1024)//小于1KB
- {
- FileSize = Length;
- unit = "byte";
- }
- else if (Length > 1024 && Length < 1024 * 1024)//大于1KB小于1MB
- {
- FileSize = Math.Round(GetFileSizeByKB(Length), 2);
- unit = "KB";
- }
- else if (Length > 1024 * 1024 && Length < 1024 * 1024 * 1024)//大于1MB小于1GB
- {
- FileSize = Math.Round(GetFileSizeByMB(Length), 2);
- unit = "MB";
- }
- else //GB
- {
- FileSize = Math.Round(GetFileSizeByGB(Length), 2);
- unit = "GB";
- }
- return FileSize;
- }
- /// <summary>
- /// 获取一个文件的长度,单位为Byte
- /// </summary>
- /// <param name="filePath">文件的绝对路径</param>
- public static long GetFileSize(string filePath)
- {
- //创建一个文件对象
- FileInfo fi = new FileInfo(filePath);
- //获取文件的大小
- return fi.Length;
- }
- /// <summary>
- /// 获取一个文件的长度,单位为KB
- /// </summary>
- /// <param name="filelength">byte</param>
- public static decimal GetFileSizeByKB(long filelength)
- {
- return Convert.ToDecimal(filelength) / 1024;
- }
- /// <summary>
- /// 获取一个文件的长度,单位为MB
- /// </summary>
- /// <param name="filePath">byte</param>
- public static decimal GetFileSizeByMB(long filelength)
- {
- //获取文件的大小
- return Convert.ToDecimal(Convert.ToDecimal(filelength / 1024) / 1024);
- }
- /// <summary>
- /// 获取一个文件的长度,单位为GB
- /// </summary>
- /// <param name="filePath">byte</param>
- public static decimal GetFileSizeByGB(long filelength)
- {
- //获取文件的大小
- return Convert.ToDecimal(Convert.ToDecimal(Convert.ToDecimal(filelength / 1024) / 1024) / 1024);
- }
- #endregion
- }
- }
|