using System; using System.Collections.Generic; using System.IO; using System.Text; using UnityEngine; namespace AlicizaX.Runtime { /// /// 文件帮助类 /// [UnityEngine.Scripting.Preserve] public static class FileHelper { /// /// 获取目录下的所有文件 /// /// 文件存放路径列表对象 /// 目标目录 [UnityEngine.Scripting.Preserve] public static void GetAllFiles(List files, string dir) { if (!Directory.Exists(dir)) { return; } string[] strings = Directory.GetFiles(dir); foreach (string item in strings) { files.Add(item); } string[] subDirs = Directory.GetDirectories(dir); foreach (string subDir in subDirs) { GetAllFiles(files, subDir); } } /// /// 清理目录 /// /// 目标路径 [UnityEngine.Scripting.Preserve] public static void CleanDirectory(string dir) { if (!Directory.Exists(dir)) { return; } foreach (string subDir in Directory.GetDirectories(dir)) { Directory.Delete(subDir, true); } foreach (string subFile in Directory.GetFiles(dir)) { File.Delete(subFile); } } /// /// 目录复制 /// /// 源路径 /// 目标路径 /// [UnityEngine.Scripting.Preserve] public static void CopyDirectory(string srcDir, string targetDir) { DirectoryInfo source = new DirectoryInfo(srcDir); DirectoryInfo target = new DirectoryInfo(targetDir); if (target.FullName.StartsWith(source.FullName, StringComparison.CurrentCultureIgnoreCase)) { throw new Exception("父目录不能拷贝到子目录!"); } if (!source.Exists) { return; } if (!target.Exists) { target.Create(); } FileInfo[] files = source.GetFiles(); for (int i = 0; i < files.Length; i++) { File.Copy(files[i].FullName, Path.Combine(target.FullName, files[i].Name), true); } DirectoryInfo[] dirs = source.GetDirectories(); for (int j = 0; j < dirs.Length; j++) { CopyDirectory(dirs[j].FullName, Path.Combine(target.FullName, dirs[j].Name)); } } /// /// 复制文件到目标目录 /// /// 源路径 /// 目标路径 /// 是否覆盖 [UnityEngine.Scripting.Preserve] public static void Copy(string sourceFileName, string destFileName, bool overwrite = false) { if (!File.Exists(sourceFileName)) { return; } File.Copy(sourceFileName, destFileName, overwrite); } /// /// 删除文件 /// /// 文件路径 [UnityEngine.Scripting.Preserve] public static void Delete(string path) { File.Delete(path); } /// /// 判断文件是否存在 /// /// 文件路径 /// [UnityEngine.Scripting.Preserve] public static bool IsExists(string path) { #if ENABLE_GAME_FRAME_X_READ_ASSETS if (IsAndroidReadOnlyPath(path, out var readPath)) { return BlankReadAssets.BlankReadAssets.IsFileExists(readPath); } #endif return File.Exists(path); } [UnityEngine.Scripting.Preserve] private static bool IsAndroidReadOnlyPath(string path, out string readPath) { if (Application.platform == RuntimePlatform.Android) { if (PathHelper.NormalizePath(path).Contains(PathHelper.AppResPath)) { readPath = path.Substring(PathHelper.AppResPath.Length); return true; } } readPath = null; return false; } /// /// 移动文件到目标目录 /// /// 文件源路径 /// 目标路径 [UnityEngine.Scripting.Preserve] public static void Move(string sourceFileName, string destFileName) { if (!File.Exists(sourceFileName)) { return; } Copy(sourceFileName, destFileName, true); Delete(sourceFileName); } /// /// 读取指定路径的文件内容 /// /// 文件路径 /// [UnityEngine.Scripting.Preserve] public static byte[] ReadAllBytes(string path) { #if ENABLE_GAME_FRAME_X_READ_ASSETS if (IsAndroidReadOnlyPath((path), out var readPath)) { return BlankReadAssets.BlankReadAssets.Read(readPath); } #endif return File.ReadAllBytes(path); } /// /// 读取指定路径的文件内容 /// /// 文件路径 /// 编码 /// [UnityEngine.Scripting.Preserve] public static string ReadAllText(string path, Encoding encoding) { return File.ReadAllText(path, encoding); } /// /// 读取指定路径的文件内容 /// /// 文件路径 /// [UnityEngine.Scripting.Preserve] public static string ReadAllText(string path) { return File.ReadAllText(path, Encoding.UTF8); } /// /// 读取指定路径的文件内容 /// /// 文件路径 /// 编码 /// [UnityEngine.Scripting.Preserve] public static string[] ReadAllLines(string path, Encoding encoding) { return File.ReadAllLines(path, encoding); } /// /// 读取指定路径的文件内容 /// /// 文件路径 /// [UnityEngine.Scripting.Preserve] public static string[] ReadAllLines(string path) { return File.ReadAllLines(path, Encoding.UTF8); } /// /// 写入指定路径的文件内容 /// /// 文件路径 /// 写入内容 /// [UnityEngine.Scripting.Preserve] public static void ReadAllLines(string path, byte[] buffer) { File.WriteAllBytes(path, buffer); } /// /// 写入指定路径的文件内容 /// /// 文件路径 /// 写入的内容 /// 编码 /// [UnityEngine.Scripting.Preserve] public static void WriteAllLines(string path, string[] lines, Encoding encoding) { File.WriteAllLines(path, lines, encoding); } /// /// 写入指定路径的文件内容 /// /// 文件路径 /// 写入的内容 /// [UnityEngine.Scripting.Preserve] public static void WriteAllLines(string path, string[] lines) { File.WriteAllLines(path, lines, Encoding.UTF8); } /// /// 写入指定路径的文件内容 /// /// 文件路径 /// 写入的内容 /// 编码 /// [UnityEngine.Scripting.Preserve] public static void WriteAllText(string path, string content, Encoding encoding) { File.WriteAllText(path, content, encoding); } /// /// 写入指定路径的文件内容,UTF-8 /// /// 文件路径 /// 写入的内容 /// [UnityEngine.Scripting.Preserve] public static void WriteAllText(string path, string content) { File.WriteAllText(path, content, Encoding.UTF8); } /// /// 写入指定路径的文件内容 /// /// 文件路径 /// 写入的内容 /// [UnityEngine.Scripting.Preserve] public static void WriteAllBytes(string path, byte[] buffer) { File.WriteAllBytes(path, buffer); } } }