Files
TEngine/Assets/TEngine/Runtime/Utility/Utility.File.cs
ALEXTANG 7768727ab1 Utity
Utity
2023-04-01 13:22:36 +08:00

232 lines
7.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;
namespace TEngine
{
/// <summary>
/// Unity平台路径类型。
/// </summary>
public enum UnityPlatformPathType : int
{
dataPath = 0,
streamingAssetsPath,
persistentDataPath,
temporaryCachePath,
}
public static partial class Utility
{
/// <summary>
/// 文件相关的实用函数。
/// </summary>
public static class File
{
public static bool CreateFile(string filePath, bool isCreateDir = true)
{
if (!System.IO.File.Exists(filePath))
{
string dir = System.IO.Path.GetDirectoryName(filePath);
if (!Directory.Exists(dir))
{
if (isCreateDir)
{
Directory.CreateDirectory(dir);
}
else
{
Log.Error("文件夹不存在 Path=" + dir);
return false;
}
}
System.IO.File.Create(filePath);
}
return true;
}
public static bool CreateFile(string filePath, string info, bool isCreateDir = true)
{
StreamWriter sw;
FileInfo t = new FileInfo(filePath);
if (!t.Exists)
{
string dir = System.IO.Path.GetDirectoryName(filePath);
if (!Directory.Exists(dir))
{
if (isCreateDir)
{
Directory.CreateDirectory(dir);
}
else
{
#if UNITY_EDITOR
EditorUtility.DisplayDialog("Tips", "文件夹不存在", "CANCEL");
#endif
Log.Error("文件夹不存在 Path=" + dir);
return false;
}
}
sw = t.CreateText();
}
else
{
sw = t.AppendText();
}
sw.WriteLine(info);
sw.Close();
sw.Dispose();
return true;
}
public static string GetPersistentDataPlatformPath(string filePath)
{
filePath =
#if UNITY_ANDROID && !UNITY_EDITOR
Application.dataPath + "!assets" + "/" + filePath;
#else
Application.streamingAssetsPath + "/" + filePath;
#endif
return filePath;
}
public static string GetPath(string path)
{
return path.Replace("\\", "/");
}
public static string Md5ByPathName(string pathName)
{
try
{
FileStream file = new FileStream(pathName, FileMode.Open);
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
return sb.ToString();
}
catch (Exception ex)
{
Log.Error("to md5 fail,error:" + ex.Message);
return "Error";
}
}
public static string GetLengthString(long length)
{
if (length < 1024)
{
return $"{length.ToString()} Bytes";
}
if (length < 1024 * 1024)
{
return $"{(length / 1024f):F2} KB";
}
return length < 1024 * 1024 * 1024 ? $"{(length / 1024f / 1024f):F2} MB" : $"{(length / 1024f / 1024f / 1024f):F2} GB";
}
public static string GetByteLengthString(long byteLength)
{
if (byteLength < 1024L) // 2 ^ 10
{
return Utility.Text.Format("{0} Bytes", byteLength.ToString());
}
if (byteLength < 1048576L) // 2 ^ 20
{
return Utility.Text.Format("{0} KB", (byteLength / 1024f).ToString("F2"));
}
if (byteLength < 1073741824L) // 2 ^ 30
{
return Utility.Text.Format("{0} MB", (byteLength / 1048576f).ToString("F2"));
}
if (byteLength < 1099511627776L) // 2 ^ 40
{
return Utility.Text.Format("{0} GB", (byteLength / 1073741824f).ToString("F2"));
}
if (byteLength < 1125899906842624L) // 2 ^ 50
{
return Utility.Text.Format("{0} TB", (byteLength / 1099511627776f).ToString("F2"));
}
if (byteLength < 1152921504606846976L) // 2 ^ 60
{
return Utility.Text.Format("{0} PB", (byteLength / 1125899906842624f).ToString("F2"));
}
return Utility.Text.Format("{0} EB", (byteLength / 1152921504606846976f).ToString("F2"));
}
public static string BinToUtf8(byte[] total)
{
byte[] result = total;
if (total[0] == 0xef && total[1] == 0xbb && total[2] == 0xbf)
{
// utf8文件的前三个字节为特殊占位符要跳过
result = new byte[total.Length - 3];
System.Array.Copy(total, 3, result, 0, total.Length - 3);
}
string utf8string = System.Text.Encoding.UTF8.GetString(result);
return utf8string;
}
/// <summary>
/// 数据格式转换
/// </summary>
/// <param name="data">数据</param>
/// <returns></returns>
public static string FormatData(long data)
{
string result = "";
if (data < 0)
data = 0;
if (data > 1024 * 1024)
{
result = ((int)(data / (1024 * 1024))).ToString() + "MB";
}
else if (data > 1024)
{
result = ((int)(data / 1024)).ToString() + "KB";
}
else
{
result = data + "B";
}
return result;
}
/// <summary>
/// 获取文件大小
/// </summary>
/// <param name="path">文件路径</param>
/// <returns></returns>
public static long GetFileSize(string path)
{
using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
return file.Length;
}
}
}
}
}