using System.IO; using System.Reflection; using System.Text.RegularExpressions; namespace Tede.Data.Tests.Utils { public static class PathUtils { public const char SeparatorChar = '\\'; public static readonly char[] InvalidPathChars = Path.GetInvalidPathChars(); public static string Combine(params string[] paths) { var retval = string.Empty; if (paths != null && paths.Length > 0) { retval = paths[0]?.Replace(PageUtils.SeparatorChar, SeparatorChar).TrimEnd(SeparatorChar) ?? string.Empty; for (var i = 1; i < paths.Length; i++) { var path = paths[i] != null ? paths[i].Replace(PageUtils.SeparatorChar, SeparatorChar).Trim(SeparatorChar) : string.Empty; retval = Path.Combine(retval, path); } } return retval; } public static string Add(string rootPath, params string[] paths) { if (paths != null && paths.Length > 0) { foreach (var path in paths) { var cleanPath = RemoveParentPath(path); if (!string.IsNullOrWhiteSpace(cleanPath)) { rootPath = Combine(rootPath, cleanPath); } } } return rootPath; } /// /// 根据路径扩展名判断是否为文件夹路径 /// /// /// public static bool IsDirectoryPath(string path) { var retval = false; if (!string.IsNullOrEmpty(path)) { var ext = Path.GetExtension(path); if (string.IsNullOrEmpty(ext)) //path为文件路径 { retval = true; } } return retval; } public static bool IsFilePath(string val) { try { return FileUtils.IsFileExists(val); } catch { return false; } } public static string GetExtension(string path) { var retval = string.Empty; if (!string.IsNullOrEmpty(path)) { path = PageUtils.RemoveQueryString(path); path = path.Trim('/', '\\').Trim(); try { retval = Path.GetExtension(path); } catch { // ignored } } return retval; } public static string RemoveExtension(string fileName) { var retval = string.Empty; if (!string.IsNullOrEmpty(fileName)) { var index = fileName.LastIndexOf('.'); retval = index != -1 ? fileName.Substring(0, index) : fileName; } return retval; } public static string RemoveParentPath(string path) { var retval = string.Empty; if (!string.IsNullOrEmpty(path)) { retval = path.Replace("../", string.Empty); retval = retval.Replace("./", string.Empty); } return retval; } public static string GetFileName(string filePath) { return Path.GetFileName(filePath); } public static string GetFileNameWithoutExtension(string filePath) { return Path.GetFileNameWithoutExtension(filePath); } public static string GetDirectoryName(string path, bool isFile) { if (string.IsNullOrWhiteSpace(path)) return string.Empty; if (isFile) { path = Path.GetDirectoryName(path); } if (!string.IsNullOrEmpty(path)) { var directoryInfo = new DirectoryInfo(path); return directoryInfo.Name; } return string.Empty; } public static string GetPathDifference(string rootPath, string path) { if (!string.IsNullOrEmpty(path) && StringUtils.StartsWithIgnoreCase(path, rootPath)) { var retval = path.Substring(rootPath.Length, path.Length - rootPath.Length); return retval.Trim('/', '\\'); } return string.Empty; } public static string GetBinDirectoryPath(string relatedPath) { string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); return Combine(assemblyFolder, RemoveParentPath(relatedPath)); } public static string RemovePathInvalidChar(string filePath) { if (string.IsNullOrEmpty(filePath)) return filePath; var invalidChars = new string(Path.GetInvalidPathChars()); string invalidReStr = $"[{Regex.Escape(invalidChars)}]"; return Regex.Replace(filePath, invalidReStr, ""); } } }