using System; using System.Data; using System.IO; using System.Text; namespace HT.Cloud.Code { public class FileHelper { public static string MapPath(string path) { try { string rootdir = Directory.GetCurrentDirectory(); //DirectoryInfo Dir = Directory.GetParent(rootdir); //string root = Dir.Parent.Parent.Parent.FullName; return rootdir + path; } catch (Exception) { return path; } } #region 获取文件到集合中 /// /// 读取指定位置文件列表到集合中 /// /// 指定路径 /// 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 检测指定路径是否存在 /// /// 检测指定路径是否存在 /// /// 目录的绝对路径 public static bool IsExistDirectory(string path) { return Directory.Exists(path); } #endregion 检测指定路径是否存在 #region 检测指定文件是否存在,如果存在则返回true /// /// 检测指定文件是否存在,如果存在则返回true /// /// 文件的绝对路径 public static bool IsExistFile(string filePath) { return File.Exists(filePath); } #endregion 检测指定文件是否存在,如果存在则返回true #region 创建文件夹 /// /// 创建文件夹 /// /// 文件夹的绝对路径 public static void CreateFolder(string folderPath) { if (!IsExistDirectory(folderPath)) { Directory.CreateDirectory(folderPath); } } #endregion 创建文件夹 #region 判断上传文件后缀名 /// /// 判断上传文件后缀名 /// /// 后缀名 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 创建文件夹 /// /// 创建文件夹 /// /// 文件的绝对路径 public static void CreateSuffic(string fileName) { try { if (!Directory.Exists(fileName)) { Directory.CreateDirectory(fileName); } } catch (Exception) { throw; } } /// /// 创建文件夹 /// /// 文件的绝对路径 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 创建文本文件 /// /// 创建文件 /// /// /// 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 创建文本文件 /// /// 创建一个文件,并将字节流写入文件。 /// /// 文件的绝对路径 /// 二进制流数据 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 将文件移动到指定目录 /// /// 将文件移动到指定目录 /// /// 需要移动的源文件的绝对路径 /// 移动到的目录的绝对路径 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 将源文件的内容复制到目标文件中 /// /// 将源文件的内容复制到目标文件中 /// /// 源文件的绝对路径 /// 目标文件的绝对路径 public static void Copy(string sourceFilePath, string descDirectoryPath) { File.Copy(sourceFilePath, descDirectoryPath, true); } #endregion 将源文件的内容复制到目标文件中 #region 从文件的绝对路径中获取文件名( 不包含扩展名 ) /// /// 从文件的绝对路径中获取文件名( 不包含扩展名 ) /// /// 文件的绝对路径 public static string GetFileName(string filePath) { FileInfo file = new FileInfo(filePath); return file.Name; } #endregion 从文件的绝对路径中获取文件名( 不包含扩展名 ) #region 获取文件的后缀名 /// /// 获取文件的后缀名 /// /// 文件的绝对路径 public static string GetExtension(string filePath) { FileInfo file = new FileInfo(filePath); return file.Extension; } /// /// 返回文件扩展名,不含“.” /// /// 文件全名称 /// string 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 删除指定文件 /// /// 删除指定文件 /// /// 文件的绝对路径 public static void DeleteFile(string filePath) { if (IsExistFile(filePath)) { File.Delete(filePath); } } #endregion 删除指定文件 #region 删除指定目录及其所有子目录 /// /// 删除指定目录及其所有子目录 /// /// 文件的绝对路径 public static void DeleteDirectory(string directoryPath) { if (IsExistDirectory(directoryPath)) { Directory.Delete(directoryPath); } } #endregion 删除指定目录及其所有子目录 #region 清空指定目录下所有文件及子目录,但该目录依然保存. /// /// 清空指定目录下所有文件及子目录,但该目录依然保存. /// /// 指定目录的绝对路径 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 剪切 粘贴 /// /// 剪切文件 /// /// 原路径 /// 新路径 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(""); } else { //Response.Write(""); } return ret; } #endregion 剪切 粘贴 #region 检测指定目录是否为空 /// /// 检测指定目录是否为空 /// /// 指定目录的绝对路径 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 获取指定目录中所有文件列表 /// /// 获取指定目录中所有文件列表 /// /// 指定目录的绝对路径 public static string[] GetFileNames(string directoryPath) { if (!IsExistDirectory(directoryPath)) { throw new FileNotFoundException(); } return Directory.GetFiles(directoryPath); } #endregion 获取指定目录中所有文件列表 #region 获取指定目录中的子目录列表 /// /// 获取指定目录中所有子目录列表,若要搜索嵌套的子目录列表,请使用重载方法 /// /// 指定目录的绝对路径 public static string[] GetDirectories(string directoryPath) { return Directory.GetDirectories(directoryPath); } /// /// 获取指定目录及子目录中所有子目录列表 /// /// 指定目录的绝对路径 /// 模式字符串,"*"代表0或N个字符,"?"代表1个字符。 /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。 /// 是否搜索子目录 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 获取一个文件的长度 /// /// 获取一个文件的长度,单位为Byte /// /// 文件的绝对路径 public static int GetFileSize(string filePath) { //创建一个文件对象 FileInfo fi = new FileInfo(filePath); //获取文件的大小 return (int)fi.Length; } /// /// 获取一个文件的长度,单位为KB /// /// 文件的路径 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); } /// /// 获取一个文件的长度,单位为MB /// /// 文件的路径 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 /// /// 计算文件大小函数(保留两位小数),Size为字节大小 /// /// 初始文件大小 /// 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 将文件读取到字符串中 /// /// 将文件读取到字符串中 /// /// 文件的绝对路径 public static string FileToString(string filePath) { return FileToString(filePath, Encoding.UTF8); } /// /// 将文件读取到字符串中 /// /// 文件的绝对路径 /// 字符编码 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|"; 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 判断文件 } }