using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Debug = UnityEngine.Debug;
namespace Framework.Utils
{
///
/// 文件操作工具类
///
public static class FileUtils
{
///
/// 异步读取文本文件
///
/// 文件路径
/// 编码格式,默认UTF8
/// 文件内容
public static async Task ReadTextAsync(string filePath, Encoding encoding = null)
{
try
{
if (!File.Exists(filePath))
{
Debug.LogError($"文件不存在: {filePath}");
return null;
}
encoding = encoding ?? Encoding.UTF8;
using (StreamReader reader = new StreamReader(filePath, encoding))
{
return await reader.ReadToEndAsync();
}
}
catch (System.Exception ex)
{
Debug.LogError($"读取文件失败: {filePath}\n{ex}");
return null;
}
}
///
/// 异步写入文本文件
///
/// 文件路径
/// 文件内容
/// 编码格式,默认UTF8
/// 是否追加模式
/// 是否写入成功
public static async Task WriteTextAsync(string filePath, string content, Encoding encoding = null, bool append = false)
{
try
{
string directory = Path.GetDirectoryName(filePath);
if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
encoding = encoding ?? Encoding.UTF8;
using (StreamWriter writer = new StreamWriter(filePath, append, encoding))
{
await writer.WriteAsync(content);
}
return true;
}
catch (System.Exception ex)
{
Debug.LogError($"写入文件失败: {filePath}\n{ex}");
return false;
}
}
///
/// 检查文件是否存在
///
/// 文件路径
/// 是否存在
public static bool Exists(string filePath)
{
return File.Exists(filePath);
}
///
/// 删除文件
///
/// 文件路径
/// 是否删除成功
public static bool Delete(string filePath)
{
try
{
if (File.Exists(filePath))
{
File.Delete(filePath);
return true;
}
return false;
}
catch (System.Exception ex)
{
Debug.LogError($"删除文件失败: {filePath}\n{ex}");
return false;
}
}
///
/// 使用系统默认程序打开文件
///
/// 文件完整路径
/// 是否成功打开
public static bool OpenFile(string filePath)
{
try
{
if (!File.Exists(filePath))
{
Debug.LogError($"文件不存在: {filePath}");
return false;
}
// 使用ProcessStartInfo来指定正确的打开方式
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = filePath;
startInfo.UseShellExecute = true; // 使用系统shell来执行,这样会用默认程序打开文件
Process.Start(startInfo);
return true;
}
catch (System.Exception ex)
{
Debug.LogError($"打开文件失败: {filePath}\n{ex}");
return false;
}
}
}
}