using System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Text; using System.Text.RegularExpressions; namespace ReZero.SuperAPI { /// <summary> /// Provides utility methods for common operations. /// </summary> internal class PubMethod { public static byte[] ConvertBase64ToBytes(string dataUri) { if (string.IsNullOrWhiteSpace(dataUri)) throw new ArgumentException("Data URI cannot be null or empty.", nameof(dataUri)); var match = Regex.Match(dataUri, @"^data:(image/\w+);base64,(.+)$", RegexOptions.IgnoreCase); if (!match.Success) throw new FormatException("Invalid data URI format."); return Convert.FromBase64String(match.Groups[2].Value); } /// <summary> /// Checks if the given URL has a valid format. /// </summary> /// <param name="url">The URL to check</param> /// <returns>True if the URL has a valid format, otherwise false</returns> public static bool IsValidUrlFormat(string url) { string pattern = @"^\/[a-zA-Z0-9_-]+\/[a-zA-Z0-9_-]+$"; if (url.Contains(".")) url = System.IO.Path.GetFileNameWithoutExtension(url); Regex regex = new Regex(pattern); return regex.IsMatch(url); } /// <summary> /// Get the types derived from the specified base type. /// </summary> /// <param name="baseType">The base type</param> /// <returns>A list of types derived from the base type</returns> public static List<Type> GetTypesDerivedFromDbBase(Type baseType) { Assembly assembly = baseType.Assembly; List<Type> derivedTypes = new List<Type>(); Type[] types = assembly.GetTypes(); foreach (Type type in types) { if (type.IsSubclassOf(baseType)) { derivedTypes.Add(type); } } return derivedTypes; } /// <summary> /// Checks if the given string is a valid property name. /// </summary> /// <param name="str">The string to check</param> /// <returns>True if the string is a valid property name, otherwise false</returns> public static bool CheckIsPropertyName(string str) { return Regex.IsMatch(str, @"^[\u4e00-\u9fa5a-zA-Z_]\w*$"); } public static byte[] ConvertFromBase64(string base64String) { int startIndex = base64String.IndexOf(',') + 1; string base64Data = base64String.Substring(startIndex); return Convert.FromBase64String(base64Data); } public static void CopyDirectory(string sourceDir, string destDir) { if (!Directory.Exists(destDir)) { Directory.CreateDirectory(destDir); } string[] files = Directory.GetFiles(sourceDir); foreach (string file in files) { string destFile = Path.Combine(destDir, Path.GetFileName(file)); File.Copy(file, destFile, true); // 设置为 true 表示覆盖已存在的文件 } string[] dirs = Directory.GetDirectories(sourceDir); foreach (string dir in dirs) { string destSubDir = Path.Combine(destDir, Path.GetFileName(dir)); CopyDirectory(dir, destSubDir); } } } }