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