IndieGame/client/Assets/Ether/Scripts/Tools/Flie/FileTools.cs
2024-10-24 23:44:04 +08:00

221 lines
6.0 KiB
C#

/********************************************************************
文件: FileTools.cs
作者: 梦语
邮箱: 1982614048@qq.com
创建时间: 2024/03/29 17:28:19
最后修改: 梦语
最后修改时间: 2024/04/03 15:59:21
功能: 文件读写工具
*********************************************************************/
using System;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
public static class FileTools
{
/// <summary>
/// 从文件中读取Json
/// </summary>
public static bool ReadFileForJson<T>(string filePath, out T data)
{
try
{
data = JsonTools.FromJson<T>(ReadFile(filePath));
return data != null;
}
catch (Exception)
{
//Debug.LogWarningFormat("文件读取错误,路径:{0}", filePath);
data = default;
return false;
}
}
///// <summary>
///// 从文件中读取Json
///// </summary>
//public static bool ReadFileForJson(Type type, string filePath, out object data)
//{
// try
// {
// //data = JsonConvert.DeserializeObject<T>(ReadFile(filePath));
// data = JsonMapper.ToObject(ReadFile(filePath), type);
// return data != null;
// }
// catch (Exception)
// {
// Debug.LogWarningFormat("文件读取错误,路径:{0}", filePath);
// data = default;
// return false;
// }
//}
/// <summary>
/// 从文件中读取字符串
/// </summary>
public static string ReadFile(string filePath)
{
try
{
Debug.Log("当前读取路径:" + filePath);
if (!File.Exists(filePath))
{
//Debug.LogWarningFormat("该文件不存在,路径:{0}", filePath);
return null;
}
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
StreamReader reader = new StreamReader(fs);
string data = reader.ReadToEnd();
reader.Close();
fs.Close();
return data;
}
}
catch (Exception)
{
//Debug.LogWarningFormat("文件读取错误,路径:{0}", filePath);
return null;
}
}
/// <summary>
/// 向文件中写入Json
/// </summary>
public static bool WriteFileForJson<T>(string filePath, T classData, bool isAppend = false, bool isFormat = false) where T : new()
{
string data = JsonTools.ToJson(classData, isFormat);
//string data = JsonMapper.ToJson(classData);
return WriteFile(filePath, data, isAppend);
}
/// <summary>
/// 向文件中写入字符串
/// </summary>
public static bool WriteFile(string filePath, string data, bool isAppend = false)
{
try
{
//Debug.Log("当前写入路径:" + filePath);
FileStream fs;
if (!File.Exists(filePath))
{
string dirPath = Path.GetDirectoryName(filePath);
Directory.CreateDirectory(dirPath);
fs = new FileStream(filePath, FileMode.Create);
}
else
{
if (!isAppend)
fs = new FileStream(filePath, FileMode.Truncate);
else
fs = new FileStream(filePath, FileMode.Append);
}
StreamWriter writer = new StreamWriter(fs);
writer.Write(data);
writer.Close();
fs.Close();
return true;
}
catch (Exception)
{
//Debug.LogErrorFormat("文件写入错误,路径:{0}", filePath);
return false;
}
}
public static bool FileExists(string filePath)
{
return File.Exists(filePath);
}
public static void CopyFile(string filePath, string targetPath)
{
if (File.Exists(filePath))
{
string dirPath = Path.GetDirectoryName(targetPath);
if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
}
File.Copy(filePath, targetPath, true);
}
}
public static void FindAllFileInDirectory(string dirPath, List<string> saveList, params string[] types)
{
// 获取文件夹内所有文件和文件夹
string[] files = Directory.GetFiles(dirPath);
string[] dirs = Directory.GetDirectories(dirPath);
// 遍历文件
foreach (string file in files)
{
bool isNeed = false;
// 检查文件是否为需要的类型
foreach (string type in types)
{
if (file.EndsWith(type))
{
isNeed = true;
break;
}
}
if (isNeed)
{
saveList.Add(file.Replace("\\", "/"));
}
}
// 递归遍历子文件夹
foreach (string dir in dirs)
{
FindAllFileInDirectory(dir, saveList, types);
}
}
/// <summary>
/// 判断文件夹是否为空
/// </summary>
/// <param name="dirPath"></param>
/// <returns></returns>
public static bool CheckIfDirectoryIsEmpty(string dirPath)
{
// 检查文件夹是否存在
if (Directory.Exists(dirPath))
{
// 获取文件夹中的所有文件和子文件夹
string[] files = Directory.GetFiles(dirPath, "*.*", SearchOption.AllDirectories);
DirectoryInfo dirInfo = new DirectoryInfo(dirPath);
DirectoryInfo[] subDirs = dirInfo.GetDirectories();
// 判断文件和子文件夹的数量
if (files.Length == 0 && subDirs.Length == 0)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
}