using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.IO; using System.Security.Cryptography; namespace YooAsset { /// /// 字符串工具类 /// internal static class StringUtility { [ThreadStatic] private static StringBuilder _cacheBuilder = new StringBuilder(1024); public static string Format(string format, object arg0) { if (string.IsNullOrEmpty(format)) throw new ArgumentNullException(); _cacheBuilder.Length = 0; _cacheBuilder.AppendFormat(format, arg0); return _cacheBuilder.ToString(); } public static string Format(string format, object arg0, object arg1) { if (string.IsNullOrEmpty(format)) throw new ArgumentNullException(); _cacheBuilder.Length = 0; _cacheBuilder.AppendFormat(format, arg0, arg1); return _cacheBuilder.ToString(); } public static string Format(string format, object arg0, object arg1, object arg2) { if (string.IsNullOrEmpty(format)) throw new ArgumentNullException(); _cacheBuilder.Length = 0; _cacheBuilder.AppendFormat(format, arg0, arg1, arg2); return _cacheBuilder.ToString(); } public static string Format(string format, params object[] args) { if (string.IsNullOrEmpty(format)) throw new ArgumentNullException(); if (args == null) throw new ArgumentNullException(); _cacheBuilder.Length = 0; _cacheBuilder.AppendFormat(format, args); return _cacheBuilder.ToString(); } public static List StringToStringList(string str, char separator) { List result = new List(); if (!String.IsNullOrEmpty(str)) { string[] splits = str.Split(separator); foreach (string split in splits) { string value = split.Trim(); //移除首尾空格 if (!String.IsNullOrEmpty(value)) { result.Add(value); } } } return result; } public static bool StringToBool(string str) { int value = (int)Convert.ChangeType(str, typeof(int)); return value > 0; } public static T NameToEnum(string name) { if (Enum.IsDefined(typeof(T), name) == false) { throw new ArgumentException($"Enum {typeof(T)} is not defined name {name}"); } return (T)Enum.Parse(typeof(T), name); } public static string RemoveFirstChar(string str) { if (string.IsNullOrEmpty(str)) return str; return str.Substring(1); } public static string RemoveLastChar(string str) { if (string.IsNullOrEmpty(str)) return str; return str.Substring(0, str.Length - 1); } public static string RemoveExtension(string str) { if (string.IsNullOrEmpty(str)) return str; int index = str.LastIndexOf("."); if (index == -1) return str; else return str.Remove(index); //"assets/config/test.unity3d" --> "assets/config/test" } } /// /// 文件工具类 /// internal static class FileUtility { /// /// 读取文件 /// public static string ReadFile(string filePath) { if (File.Exists(filePath) == false) return string.Empty; return File.ReadAllText(filePath, Encoding.UTF8); } /// /// 创建文件(如果已经存在则删除旧文件) /// public static void CreateFile(string filePath, string content) { // 删除旧文件 if (File.Exists(filePath)) File.Delete(filePath); // 创建文件夹路径 CreateFileDirectory(filePath); // 创建新文件 byte[] bytes = Encoding.UTF8.GetBytes(content); using (FileStream fs = File.Create(filePath)) { fs.Write(bytes, 0, bytes.Length); fs.Flush(); fs.Close(); } } /// /// 创建文件的文件夹路径 /// public static void CreateFileDirectory(string filePath) { // 获取文件的文件夹路径 string directory = Path.GetDirectoryName(filePath); CreateDirectory(directory); } /// /// 创建文件夹路径 /// public static void CreateDirectory(string directory) { // If the directory doesn't exist, create it. if (Directory.Exists(directory) == false) Directory.CreateDirectory(directory); } /// /// 获取文件大小(字节数) /// public static long GetFileSize(string filePath) { FileInfo fileInfo = new FileInfo(filePath); return fileInfo.Length; } } /// /// 哈希工具类 /// internal static class HashUtility { private static string ToString(byte[] hashBytes) { string result = BitConverter.ToString(hashBytes); result = result.Replace("-", ""); return result.ToLower(); } #region SHA1 /// /// 获取字符串的Hash值 /// public static string StringSHA1(string str) { byte[] buffer = Encoding.UTF8.GetBytes(str); return BytesSHA1(buffer); } /// /// 获取文件的Hash值 /// public static string FileSHA1(string filePath) { try { using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { return StreamSHA1(fs); } } catch (Exception e) { YooLogger.Exception(e); return string.Empty; } } /// /// 获取数据流的Hash值 /// public static string StreamSHA1(Stream stream) { // 说明:创建的是SHA1类的实例,生成的是160位的散列码 HashAlgorithm hash = HashAlgorithm.Create(); byte[] hashBytes = hash.ComputeHash(stream); return ToString(hashBytes); } /// /// 获取字节数组的Hash值 /// public static string BytesSHA1(byte[] buffer) { // 说明:创建的是SHA1类的实例,生成的是160位的散列码 HashAlgorithm hash = HashAlgorithm.Create(); byte[] hashBytes = hash.ComputeHash(buffer); return ToString(hashBytes); } #endregion #region MD5 /// /// 获取字符串的MD5 /// public static string StringMD5(string str) { byte[] buffer = Encoding.UTF8.GetBytes(str); return BytesMD5(buffer); } /// /// 获取文件的MD5 /// public static string FileMD5(string filePath) { try { using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { return StreamMD5(fs); } } catch (Exception e) { YooLogger.Exception(e); return string.Empty; } } /// /// 获取数据流的MD5 /// public static string StreamMD5(Stream stream) { MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider(); byte[] hashBytes = provider.ComputeHash(stream); return ToString(hashBytes); } /// /// 获取字节数组的MD5 /// public static string BytesMD5(byte[] buffer) { MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider(); byte[] hashBytes = provider.ComputeHash(buffer); return ToString(hashBytes); } #endregion #region CRC32 /// /// 获取字符串的CRC32 /// public static string StringCRC32(string str) { byte[] buffer = Encoding.UTF8.GetBytes(str); return BytesCRC32(buffer); } /// /// 获取文件的CRC32 /// public static string FileCRC32(string filePath) { try { using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)) { return StreamCRC32(fs); } } catch (Exception e) { YooLogger.Exception(e); return string.Empty; } } /// /// 获取数据流的CRC32 /// public static string StreamCRC32(Stream stream) { CRC32Algorithm hash = new CRC32Algorithm(); byte[] hashBytes = hash.ComputeHash(stream); return ToString(hashBytes); } /// /// 获取字节数组的CRC32 /// public static string BytesCRC32(byte[] buffer) { CRC32Algorithm hash = new CRC32Algorithm(); byte[] hashBytes = hash.ComputeHash(buffer); return ToString(hashBytes); } #endregion } }