Test-TaizhouWarehousePhaseII/3d/Assets/Framework/Utils/FileUtils.cs

228 lines
7.7 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.Diagnostics;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Debug = UnityEngine.Debug;
namespace Framework.Utils
{
/// <summary>
/// 文件操作工具类
/// </summary>
public static class FileUtils
{
/// <summary>
/// 异步读取文本文件
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="encoding">编码格式默认UTF8</param>
/// <returns>文件内容</returns>
public static async Task<string> 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 (FileNotFoundException ex)
{
Debug.LogError($"读取文件失败:文件不存在: {filePath}\n{ex}");
return null;
}
catch (DirectoryNotFoundException ex)
{
Debug.LogError($"读取文件失败:目录不存在: {filePath}\n{ex}");
return null;
}
catch (UnauthorizedAccessException ex)
{
Debug.LogError($"读取文件失败:访问被拒绝,权限不足: {filePath}\n{ex}");
return null;
}
catch (ArgumentException ex)
{
Debug.LogError($"读取文件失败:参数错误: {filePath}\n{ex}");
return null;
}
catch (PathTooLongException ex)
{
Debug.LogError($"读取文件失败:文件路径过长: {filePath}\n{ex}");
return null;
}
catch (IOException ex)
{
Debug.LogError($"读取文件失败: {filePath}\n{ex}");
return null;
}
}
/// <summary>
/// 异步写入文本文件
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="content">文件内容</param>
/// <param name="encoding">编码格式默认UTF8</param>
/// <param name="append">是否追加模式</param>
/// <returns>是否写入成功</returns>
public static async Task<bool> 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 (DirectoryNotFoundException ex)
{
Debug.LogError($"写入文件失败:目录不存在: {filePath}\n{ex}");
return false;
}
catch (UnauthorizedAccessException ex)
{
Debug.LogError($"写入文件失败:访问被拒绝,权限不足: {filePath}\n{ex}");
return false;
}
catch (ArgumentException ex)
{
Debug.LogError($"写入文件失败:参数错误: {filePath}\n{ex}");
return false;
}
catch (PathTooLongException ex)
{
Debug.LogError($"写入文件失败:文件路径过长: {filePath}\n{ex}");
return false;
}
catch (IOException ex)
{
Debug.LogError($"写入文件失败: {filePath}\n{ex}");
return false;
}
}
/// <summary>
/// 检查文件是否存在
/// </summary>
/// <param name="filePath">文件路径</param>
/// <returns>是否存在</returns>
public static bool Exists(string filePath)
{
return File.Exists(filePath);
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="filePath">文件路径</param>
/// <returns>是否删除成功</returns>
public static bool Delete(string filePath)
{
try
{
if (File.Exists(filePath))
{
File.Delete(filePath);
return true;
}
return false;
}
catch (FileNotFoundException ex)
{
Debug.LogError($"删除文件失败:文件不存在: {filePath}\n{ex}");
return false;
}
catch (DirectoryNotFoundException ex)
{
Debug.LogError($"删除文件失败:目录不存在: {filePath}\n{ex}");
return false;
}
catch (UnauthorizedAccessException ex)
{
Debug.LogError($"删除文件失败:访问被拒绝,权限不足: {filePath}\n{ex}");
return false;
}
catch (ArgumentException ex)
{
Debug.LogError($"删除文件失败:参数错误: {filePath}\n{ex}");
return false;
}
catch (PathTooLongException ex)
{
Debug.LogError($"删除文件失败:文件路径过长: {filePath}\n{ex}");
return false;
}
catch (IOException ex)
{
Debug.LogError($"删除文件失败: {filePath}\n{ex}");
return false;
}
}
/// <summary>
/// 使用系统默认程序打开文件
/// </summary>
/// <param name="filePath">文件完整路径</param>
/// <returns>是否成功打开</returns>
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 (FileNotFoundException ex)
{
Debug.LogError($"打开文件失败:文件不存在: {filePath}\n{ex}");
return false;
}
catch (ArgumentException ex)
{
Debug.LogError($"打开文件失败:参数错误: {filePath}\n{ex}");
return false;
}
catch (InvalidOperationException ex)
{
Debug.LogError($"打开文件失败:无效操作: {filePath}\n{ex}");
return false;
}
catch (System.ComponentModel.Win32Exception ex)
{
Debug.LogError($"打开文件失败:系统错误: {filePath}\n{ex}");
return false;
}
}
}
}