• Asp.NetCore 读取配置文件帮助类


    /// <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; }
    
        }
    

      

  • 相关阅读:
    sizeof和strlen与带汉字字符的
    PS常用工具
    色彩原理和图层混合模式
    文字工具和栅格化
    CreateWaitableTimer和SetWaitableTimer函数(定时器)
    FMod终结篇
    理财达人五步走
    C++中的Union
    关于对于VCMFCATL的评论问题
    FMOD 快速上手
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/10164932.html
Copyright © 2020-2023  润新知