You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.5 KiB
103 lines
3.5 KiB
3 weeks ago
|
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);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|