using System; using System.Collections.Generic; using System.IO; using System.Text; using Y.Utils.Net20.ListUtils; namespace Y.Utils.Net20.FileUtils { public class FileTool { /// /// 获取文件(单层目录) /// /// 路径 /// 通配符 /// public static List GetFile(string path, string pattern = "*") { List result = null; if (Directory.Exists(path)) { try { string[] list = Directory.GetFiles(path, pattern); if (ListTool.HasElements(list)) result = new List(list); } catch (Exception e) { } } return result; } /// /// 获取文件(所有目录) /// /// 路径 /// 通配符 /// public static List GetAllFile(string path, string pattern = "*") { List result = null; try { string[] list = Directory.GetFiles(path, pattern, SearchOption.AllDirectories); if (ListTool.HasElements(list)) result = new List(list); } catch (Exception e) { } return result; } /// /// 获取文件(所有目录) /// /// 路径 /// 通配符(支持多个通配符) /// public static List GetAllFile(string path, string[] pattern) { List result = new List(); if (!ListTool.IsNullOrEmpty(pattern)) { foreach (var p in pattern) { List temp = GetAllFile(path, p); if (!ListTool.IsNullOrEmpty(temp)) result.AddRange(temp); } } return result; } /// /// 获取文件(所有目录) /// /// 路径(支持多个路径) /// 通配符(支持多个通配符) /// public static List GetAllFile(string[] paths, string[] patterns) { List result = new List(); if (!ListTool.IsNullOrEmpty(paths)) { foreach (var path in paths) { if (!ListTool.IsNullOrEmpty(patterns)) { foreach (var pattern in patterns) { List temp = GetAllFile(path, pattern); if (!ListTool.IsNullOrEmpty(temp)) result.AddRange(temp); } } else { List temp = GetAllFile(path); if (!ListTool.IsNullOrEmpty(temp)) result.AddRange(temp); } } } return result; } /// /// 获取文件(所有目录)(严格模式:从第一个.开始截取后缀) /// /// 路径(支持多个路径) /// 通配符(支持多个通配符) /// public static List GetAllFileByExt(List paths, List patterns) { List result = new List(); if (!ListTool.IsNullOrEmpty(paths)) { foreach (var path in paths) { List temp = GetAllFile(path); if (!ListTool.IsNullOrEmpty(temp)) result.AddRange(temp); } } if (!ListTool.IsNullOrEmpty(patterns) && !ListTool.IsNullOrEmpty(result)) { for (int i = result.Count - 1; i >= 0; i--) { string ext = Path.GetFileName(result[i]); if (ext.IndexOf('.') >= 0) { ext = ext.Substring(ext.IndexOf('.')); } if (!patterns.Contains(ext)) result.RemoveAt(i); } } return result; } /// /// 删除文件 /// /// 文件路径 /// public static bool Delete(string file) { try { if (File.Exists(file)) { File.Delete(file); return true; } else { return true; } } catch { } return false; } /// /// 删除文件(多个) /// /// 文件路径(支持多个文件路径) /// public static bool Delete(string[] files) { bool result = true; if (!ListTool.IsNullOrEmpty(files)) { foreach (var file in files) { result = result || Delete(file); } } return result; } public static long Size(string fileName) { FileInfo fi = new FileInfo(fileName); return fi.Length; } public static string SizeFormat(string fileName) { return SizeFormat(Size(fileName)); } public static string SizeFormat(long size) { string rs = ""; if (size > 1024 * 1024 * 1024) { rs = Math.Round((double)size / 1024 / 1024 / 1024, 2) + " GB"; } else if (size > 1024 * 1024) { rs = Math.Round((double)size / 1024 / 1024, 2) + " MB"; } else if (size > 1024) { rs = Math.Round((double)size / 1024, 2) + " KB"; } else { rs = size + " B"; } return rs; } public static string SizeConvert(string fileName, string unit) { return SizeConvert(Size(fileName), unit); } public static string SizeConvert(long size, string unit) { double rs = 0; switch (unit) { case "B": rs = (double)size; break; case "KB": rs = (double)size / 1024; break; case "MB": rs = (double)size / 1024 / 1024; break; case "GB": rs = (double)size / 1024 / 1024 / 1024; break; } return Math.Round(rs, 2).ToString(); } } }