/// <summary> /// 读取配置文件信息 /// </summary> public class ConfigExtensions { public static IConfiguration Configuration { get; set; } static ConfigExtensions() { Configuration = new ConfigurationBuilder() .Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true }) .Build(); } /// <summary> /// 获得配置文件的对象值 /// </summary> /// <param name="jsonPath"></param> /// <param name="key"></param> /// <returns></returns> public static string GetJson(string jsonPath, string key) { if (string.IsNullOrEmpty(jsonPath) || string.IsNullOrEmpty(key)) return null; IConfiguration config = new ConfigurationBuilder().AddJsonFile(jsonPath).Build();//json文件地址 return config.GetSection(key).Value;//json某个对象 } /// <summary> /// 根据配置文件和Key获得对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="fileName">文件名称</param> /// <param name="key">节点Key</param> /// <returns></returns> public static T GetAppSettings<T>(string fileName, string key) where T : class, new() { if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(key)) return null; var baseDir = AppContext.BaseDirectory + "json/"; var currentClassDir = baseDir; IConfiguration config = new ConfigurationBuilder() .SetBasePath(currentClassDir) .Add(new JsonConfigurationSource { Path = fileName, Optional = false, ReloadOnChange = true }).Build(); var appconfig = new ServiceCollection().AddOptions() .Configure<T>(config.GetSection(key)) .BuildServiceProvider() .GetService<IOptions<T>>() .Value; return appconfig; } /// <summary> /// 获取自定义配置文件配置 /// </summary> /// <typeparam name="T">配置模型</typeparam> /// <param name="key">根节点</param> /// <param name="configPath">配置文件名称</param> /// <returns></returns> public T GetAppSettingss<T>(string key, string configPath) where T : class, new() { if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(configPath)) return null; IConfiguration config = new ConfigurationBuilder().Add (new JsonConfigurationSource { Path = configPath, ReloadOnChange = true }).Build(); var appconfig = new ServiceCollection() .AddOptions() .Configure<T>(config.GetSection(key)) .BuildServiceProvider() .GetService<IOptions<T>>() .Value; return appconfig; } /// <summary> /// 获取自定义配置文件配置(异步方式) /// </summary> /// <typeparam name="T">配置模型</typeparam> /// <param name="key">根节点</param> /// <param name="configPath">配置文件名称</param> /// <returns></returns> public async Task<T> GetAppSettingsAsync<T>(string key, string configPath) where T : class, new() { if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(configPath)) return null; IConfiguration config = new ConfigurationBuilder() .Add(new JsonConfigurationSource { Path = configPath, ReloadOnChange = true }).Build(); var appconfig = new ServiceCollection() .AddOptions() .Configure<T>(config.GetSection(key)) .BuildServiceProvider() .GetService<IOptions<T>>() .Value; return await Task.Run(() => appconfig); } /// <summary> /// 获取自定义配置文件配置 /// </summary> /// <typeparam name="T">配置模型</typeparam> /// <param name="key">根节点</param> /// <param name="configPath">配置文件名称</param> /// <returns></returns> public List<T> GetListAppSettings<T>(string key, string configPath) where T : class, new() { if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(configPath)) return null; IConfiguration config = new ConfigurationBuilder() .Add(new JsonConfigurationSource { Path = configPath, ReloadOnChange = true }).Build(); var appconfig = new ServiceCollection() .AddOptions() .Configure<List<T>>(config.GetSection(key)) .BuildServiceProvider() .GetService<IOptions<List<T>>>() .Value; return appconfig; } /// <summary> /// 获取自定义配置文件配置(异步方式) /// </summary> /// <typeparam name="T">配置模型</typeparam> /// <param name="key">根节点</param> /// <param name="configPath">配置文件名称</param> /// <returns></returns> public async Task<List<T>> GetListAppSettingsAsync<T>(string key, string configPath) where T : class, new() { if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(configPath)) return null; IConfiguration config = new ConfigurationBuilder() .Add(new JsonConfigurationSource { Path = configPath, ReloadOnChange = true }) .Build(); var appconfig = new ServiceCollection() .AddOptions() .Configure<List<T>>(config.GetSection(key)) .BuildServiceProvider() .GetService<IOptions<List<T>>>() .Value; return await Task.Run(() => appconfig); } }
文件读取类:
public class FileHelperCore { private static IHostingEnvironment _hostingEnvironment = new HttpContextAccessor().HttpContext.RequestServices.GetService (typeof(IHostingEnvironment)) as IHostingEnvironment; /// <summary> /// 目录分隔符 /// windows "" OSX and Linux "/" /// </summary> private static string DirectorySeparatorChar = Path.DirectorySeparatorChar.ToString(); /// <summary> /// 包含应用程序的目录的绝对路径 /// </summary> private static string _ContentRootPath = _hostingEnvironment.ContentRootPath; #region 检测指定路径是否存在 /// <summary> /// 检测指定路径是否存在 /// </summary> /// <param name="path">路径</param> /// <returns></returns> public static bool IsExist(string path) { if (string.IsNullOrEmpty(path)) return false; return IsDirectory(MapPath(path)) ? Directory.Exists(MapPath(path)) : File.Exists(MapPath(path)); } /// <summary> /// 检测指定路径是否存在(异步方式) /// </summary> /// <param name="path">路径</param> /// <returns></returns> public static async Task<bool> IsExistAsync(string path) { if (string.IsNullOrEmpty(path)) return false; return await Task.Run(() => IsDirectory(MapPath(path)) ? Directory.Exists(MapPath(path)) : File.Exists(MapPath(path))); } #endregion #region 检测目录是否为空 /// <summary> /// 检测目录是否为空 /// </summary> /// <param name="path">路径</param> /// <returns></returns> public static bool IsEmptyDirectory(string path) { if (string.IsNullOrEmpty(path)) return false; return Directory.GetFiles(MapPath(path)).Length <= 0 && Directory.GetDirectories(MapPath(path)).Length <= 0; } /// <summary> /// 检测目录是否为空 /// </summary> /// <param name="path">路径</param> /// <returns></returns> public static async Task<bool> IsEmptyDirectoryAsync(string path) { if (string.IsNullOrEmpty(path)) return false; return await Task.Run(() => Directory.GetFiles(MapPath(path)).Length <= 0 && Directory.GetDirectories(MapPath(path)).Length <= 0); } #endregion #region 创建目录 /// <summary> /// 创建目录 /// </summary> /// <param name="path">路径</param> public static void CreateFiles(string path) { if (string.IsNullOrEmpty(path)) return; try { if (IsDirectory(MapPath(path))) Directory.CreateDirectory(MapPath(path)); else File.Create(MapPath(path)).Dispose(); } catch (Exception ex) { throw ex; } } #endregion #region 删除文件或目录 /// <summary> /// 删除目录或文件 /// </summary> /// <param name="path">路径</param> public static void DeleteFiles(string path) { if (string.IsNullOrEmpty(path)) return; try { if (IsExist(path)) { if (IsDirectory(MapPath(path))) Directory.Delete(MapPath(path)); else File.Delete(MapPath(path)); } } catch (Exception ex) { throw ex; } } /// <summary> /// 清空目录下所有文件及子目录,依然保留该目录 /// </summary> /// <param name="path"></param> public static void ClearDirectory(string path) { if (string.IsNullOrEmpty(path)) return; if (IsExist(path)) { //目录下所有文件 string[] files = Directory.GetFiles(MapPath(path)); foreach (var file in files) { DeleteFiles(file); } //目录下所有子目录 string[] directorys = Directory.GetDirectories(MapPath(path)); foreach (var dir in directorys) { DeleteFiles(dir); } } } #endregion #region 判断文件是否为隐藏文件(系统独占文件) /// <summary> /// 检测文件或文件夹是否为隐藏文件 /// </summary> /// <param name="path">路径</param> /// <returns></returns> public static bool IsHiddenFile(string path) { if (string.IsNullOrEmpty(path)) return false; return IsDirectory(MapPath(path)) ? InspectHiddenFile( new DirectoryInfo(MapPath(path))) : InspectHiddenFile(new FileInfo(MapPath(path))); } /// <summary> /// 检测文件或文件夹是否为隐藏文件(异步方式) /// </summary> /// <param name="path">路径</param> /// <returns></returns> public static async Task<bool> IsHiddenFileAsync(string path) { if (string.IsNullOrEmpty(path)) return false; return await Task.Run(() => IsDirectory(MapPath(path)) ? InspectHiddenFile(new DirectoryInfo(MapPath(path))) : InspectHiddenFile(new FileInfo(MapPath(path)))); } /// <summary> /// 私有方法 文件是否为隐藏文件(系统独占文件) /// </summary> /// <param name="fileSystemInfo"></param> /// <returns></returns> private static bool InspectHiddenFile(FileSystemInfo fileSystemInfo) { if (fileSystemInfo == null) return false; if (fileSystemInfo.Name.StartsWith(".")) { return true; } else if (fileSystemInfo.Exists && ((fileSystemInfo.Attributes & FileAttributes.Hidden) != 0 || (fileSystemInfo.Attributes & FileAttributes.System) != 0)) { return true; } return false; } #endregion #region 文件操作 #region 复制文件 /// <summary> /// 复制文件内容到目标文件夹 /// </summary> /// <param name="sourcePath">源文件</param> /// <param name="targetPath">目标文件夹</param> /// <param name="isOverWrite">是否可以覆盖</param> public static void Copy(string sourcePath, string targetPath, bool isOverWrite = true) { if (string.IsNullOrEmpty(sourcePath) || string.IsNullOrEmpty(targetPath)) return; File.Copy(MapPath(sourcePath), MapPath(targetPath) + GetFileName(sourcePath), isOverWrite); } /// <summary> /// 复制文件内容到目标文件夹 /// </summary> /// <param name="sourcePath">源文件</param> /// <param name="targetPath">目标文件夹</param> /// <param name="newName">新文件名称</param> /// <param name="isOverWrite">是否可以覆盖</param> public static void Copy(string sourcePath, string targetPath, string newName, bool isOverWrite = true) { if (string.IsNullOrEmpty(sourcePath) || string.IsNullOrEmpty(targetPath)) return; File.Copy(MapPath(sourcePath), MapPath(targetPath) + newName, isOverWrite); } #endregion #region 移动文件 /// <summary> /// 移动文件到目标目录 /// </summary> /// <param name="sourcePath">源文件</param> /// <param name="targetPath">目标目录</param> public static void Move(string sourcePath, string targetPath) { if (string.IsNullOrEmpty(sourcePath) || string.IsNullOrEmpty(targetPath)) return; string sourceFileName = GetFileName(sourcePath); //如果目标目录不存在则创建 if (IsExist(targetPath)) { CreateFiles(targetPath); } else { //如果目标目录存在同名文件则删除 if (IsExist(Path.Combine(MapPath(targetPath), sourceFileName))) { DeleteFiles(Path.Combine(MapPath(targetPath), sourceFileName)); } } File.Move(MapPath(sourcePath), Path.Combine(MapPath(targetPath), sourcePath)); } #endregion /// <summary> /// 获取文件名和扩展名 /// </summary> /// <param name="path">文件路径</param> /// <returns></returns> public static string GetFileName(string path) { if (string.IsNullOrEmpty(path)) return path; return Path.GetFileName(MapPath(path)); } /// <summary> /// 获取文件名不带扩展名 /// </summary> /// <param name="path">文件路径</param> /// <returns></returns> public static string GetFileNameWithOutExtension(string path) { if (string.IsNullOrEmpty(path)) return path; return Path.GetFileNameWithoutExtension(MapPath(path)); } /// <summary> /// 获取文件扩展名 /// </summary> /// <param name="path">文件路径</param> /// <returns></returns> public static string GetFileExtension(string path) { if (string.IsNullOrEmpty(path)) return path; return Path.GetExtension(MapPath(path)); } #endregion #region 获取文件绝对路径 /// <summary> /// 获取文件绝对路径 /// </summary> /// <param name="path">文件路径</param> /// <returns></returns> public static string MapPath(string path) { if (string.IsNullOrEmpty(path)) return path; return Path.Combine(_ContentRootPath, path.TrimStart('~', '/').Replace("/", DirectorySeparatorChar)); } /// <summary> /// 获取文件绝对路径(异步方式) /// </summary> /// <param name="path">文件路径</param> /// <returns></returns> public static async Task<string> MapPathAsync(string path) { if (string.IsNullOrEmpty(path)) return path; return await Task.Run(()=> Path.Combine(_ContentRootPath,path.TrimStart('~','/'). Replace("/", DirectorySeparatorChar))); } /// <summary> /// 是否为目录或文件夹 /// </summary> /// <param name="path">路径</param> /// <returns></returns> public static bool IsDirectory(string path) { if (string.IsNullOrEmpty(path)) return false; if (path.EndsWith(DirectorySeparatorChar)) return true; else return false; } #endregion #region 物理路径转虚拟路径 public static string PhysicalToVirtual(string physicalPath) { if (string.IsNullOrEmpty(physicalPath)) return physicalPath; return physicalPath.Replace(_ContentRootPath, "").Replace(DirectorySeparatorChar, "/"); } #endregion #region 文件格式 /// <summary> /// 是否可添加水印 /// </summary> /// <param name="_fileExt">文件扩展名,不含“.”</param> /// <returns></returns> public static bool IsCanWater(string _fileExt) { if (string.IsNullOrEmpty(_fileExt)) return false; var images = new List<string> { "jpg", "jpeg" }; if (images.Contains(_fileExt.ToLower())) return true; return false; } /// <summary> /// 是否为图片 /// </summary> /// <param name="_fileExt">文件扩展名,不含“.”</param> /// <returns></returns> public static bool IsImage(string _fileExt) { if (string.IsNullOrEmpty(_fileExt)) return false; var images = new List<string> { "bmp", "gif", "jpg", "jpeg", "png" }; if (images.Contains(_fileExt.ToLower())) return true; return false; } /// <summary> /// 是否为视频 /// </summary> /// <param name="_fileExt">文件扩展名,不含“.”</param> /// <returns></returns> public static bool IsVideos(string _fileExt) { if (string.IsNullOrEmpty(_fileExt)) return false; var videos=new List<string> { "rmvb", "mkv", "ts", "wma", "avi", "rm", "mp4", "flv", "mpeg", "mov", "3gp", "mpg" }; if (videos.Contains(_fileExt.ToLower())) return true; return false; } /// <summary> /// 是否为音频 /// </summary> /// <param name="_fileExt">文件扩展名,不含“.”</param> /// <returns></returns> public static bool IsMusics(string _fileExt) { if (string.IsNullOrEmpty(_fileExt)) return false; var musics = new List<string> { "mp3", "wav" }; if (musics.Contains(_fileExt.ToLower())) return true; return false; } /// <summary> /// 是否为文档 /// </summary> /// <param name="_fileExt">文件扩展名,不含“.”</param> /// <returns></returns> public static bool IsDocument(string _fileExt) { if (string.IsNullOrEmpty(_fileExt)) return false; var documents = new List<string> { "doc", "docx", "xls", "xlsx", "ppt", "pptx", "txt", "pdf" }; if (documents.Contains(_fileExt.ToLower())) return true; return false; } #endregion #region 文件图标 public static string FindFileIcon(string fileExt) { if (string.IsNullOrEmpty(fileExt)) return fileExt; if (IsImage(fileExt)) return "fa fa-image"; if (IsVideos(fileExt)) return "fa fa-film"; if (IsMusics(fileExt)) return "fa fa-music"; if(IsDocument(fileExt)) switch (fileExt.ToLower()) { case ".xls": case ".xlsx": return "fa fa-file-excel-o"; case ".ppt": case ".pptx": return "fa fa-file-powerpoint-o"; case ".pdf": return "fa fa-file-pdf-o"; case ".txt": return "fa fa-file-text-o"; default: return "fa fa-file-word-o"; } if (fileExt.ToLower() == "zip" || fileExt.ToLower() == "rar") return "fa fa-file-zip-o"; else return "fa fa-file"; } #endregion #region 文件大小转换 /// <summary> /// 文件大小转为B、KB、MB、GB... /// </summary> /// <param name="size"></param> /// <returns></returns> public static string FileSizeTransf(long size) { if (size==0) return null; String[] units = new String[] { "B", "KB", "MB", "GB", "TB", "PB" }; long mod = 1024; int i = 0; while (size > mod) { size /= mod; i++; } return size + units[i]; } #endregion #region 获取目录下所有文件 public static List<FilesInfo> FindFiles(string path, string staticFiles = "/wwwroot") { if (string.IsNullOrEmpty(path)) return null; string[] folders = Directory.GetDirectories(MapPath(path), "*", SearchOption.AllDirectories); var Files = new List<FilesInfo>(); foreach (var folder in folders) { foreach (var fsi in new DirectoryInfo(folder).GetFiles()) { Files.Add(new FilesInfo() { Name = fsi.Name, FullName = fsi.FullName, FileExt = fsi.Extension, FileOriginalSize = fsi.Length, FileSize = FileSizeTransf(fsi.Length), FileIcon = FindFileIcon(fsi.Extension.Remove(0, 1)), FileName = PhysicalToVirtual(fsi.FullName).Replace(staticFiles, ""), FileStyle = IsImage(fsi.Extension.Remove(0, 1)) ? "images" : IsDocument(fsi.Extension.Remove(0, 1)) ? "documents" : IsVideos(fsi.Extension.Remove(0, 1)) ? "videos" : IsMusics(fsi.Extension.Remove(0, 1)) ? "musics" : "others", CreateDate = fsi.CreationTime, LastWriteDate = fsi.LastWriteTime, LastAccessDate = fsi.LastAccessTime }); } } return Files; } /// <summary> /// 获得指定文件夹下面的所有文件 /// </summary> /// <param name="path"></param> /// <param name="staticFiles"></param> /// <returns></returns> public static List<FilesInfo> ResolveFileInfo(string path, string staticFiles = "/wwwroot") { if (string.IsNullOrEmpty(path)) return null; var foldersPath = MapPath(path); var Files = new List<FilesInfo>(); foreach (var fsi in new DirectoryInfo(foldersPath).GetFiles()) { Files.Add(new FilesInfo() { Name = fsi.Name, FullName = fsi.FullName, FileExt = fsi.Extension, FileOriginalSize = fsi.Length, FileSize = FileSizeTransf(fsi.Length), FileIcon = FindFileIcon(fsi.Extension.Remove(0, 1)), FileName = PhysicalToVirtual(fsi.FullName).Replace(staticFiles, ""), FileStyle = IsImage(fsi.Extension.Remove(0, 1)) ? "images" : IsDocument(fsi.Extension.Remove(0, 1)) ? "documents" : IsVideos(fsi.Extension.Remove(0, 1)) ? "videos" : IsMusics(fsi.Extension.Remove(0, 1)) ? "musics" : "others", CreateDate = fsi.CreationTime, LastWriteDate = fsi.LastWriteTime, LastAccessDate = fsi.LastAccessTime }); } return Files; } #endregion } public class FilesInfo { /// <summary> /// 文件名称 /// </summary> public string Name { get; set; } /// <summary> /// 文件物理路径 /// </summary> public string FullName { get; set; } /// <summary> /// 扩展名 /// </summary> public string FileExt { get; set; } /// <summary> /// 原始大小(字节) /// </summary> public long FileOriginalSize { get; set; } /// <summary> /// 文件大小 /// </summary> public string FileSize { get; set; } /// <summary> /// 文件虚拟路径 /// </summary> public string FileName { get; set; } /// <summary> /// 文件类型 /// </summary> public string FileStyle { get; set; } /// <summary> /// 文件图标 /// </summary> public string FileIcon { get; set; } /// <summary> /// 创建时间 /// </summary> public DateTime CreateDate { get; set; } /// <summary> /// 最后修改时间 /// </summary> public DateTime LastWriteDate { get; set; } /// <summary> /// 最后访问时间 /// </summary> public DateTime LastAccessDate { get; set; } }