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