2026-06-02 17:04:29 +03:00

138 lines
4.6 KiB
C#

using System;
using System.IO;
using UnityEngine;
public class FileUtil
{
/// <summary>
/// Сохраняет текст в файл
/// </summary>
public static (bool OK, string Message) SaveText(string fileName, string filePath, string content)
{
try
{
string fullPath = Path.Combine(filePath, fileName);
string directory = Path.GetDirectoryName(fullPath);
// Создаем директорию, если её нет
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
File.WriteAllText(fullPath, content);
return (true, $"Файл успешно сохранен: {fullPath}");
}
catch (Exception ex)
{
Debug.LogError($"Ошибка при сохранении файла: {ex.Message}");
return (false, $"Ошибка сохранения: {ex.Message}");
}
}
/// <summary>
/// Загружает текст из файла
/// </summary>
public static (bool OK, string Message, string Content) LoadText(string fileName, string filePath)
{
try
{
string fullPath = Path.Combine(filePath, fileName);
if (!File.Exists(fullPath))
{
return (false, $"Файл не найден: {fullPath}", null);
}
string content = File.ReadAllText(fullPath);
return (true, $"Файл успешно загружен: {fullPath}", content);
}
catch (Exception ex)
{
Debug.LogError($"Ошибка при загрузке файла: {ex.Message}");
return (false, $"Ошибка загрузки: {ex.Message}", null);
}
}
/// <summary>
/// Сохраняет JSON объект в файл
/// </summary>
/// <param name="fileName">Имя файла</param>
/// <param name="filePath">Путь к файлу</param>
/// <param name="data">Объект для сохранения</param>
/// <returns>Кортеж (bool OK, string Message)</returns>
public static (bool OK, string Message) SaveJson<T>(string fileName, string filePath, T data)
{
try
{
string json = JsonUtility.ToJson(data, true);
return SaveText(fileName, filePath, json);
}
catch (Exception ex)
{
Debug.LogError($"Ошибка при сохранении JSON: {ex.Message}");
return (false, $"Ошибка сохранения JSON: {ex.Message}");
}
}
public static (bool OK, string Message) SaveJson<T>(string fileName, AppDirectory directory, T data)
{
return SaveJson<T>(fileName, GetDirectoryName(directory), data);
}
private static string GetDirectoryName(AppDirectory directory)
{
return directory switch
{
AppDirectory.Streaming => Application.streamingAssetsPath,
AppDirectory.Persistent => Application.persistentDataPath,
_ => Path.Combine(Application.persistentDataPath, "TRASH")
};
}
/// <summary>
/// Загружает JSON объект из файла
/// </summary>
/// <param name="fileName">Имя файла</param>
/// <param name="filePath">Путь к файлу</param>
/// <returns>Кортеж (bool OK, string Message, T Data)</returns>
public static (bool OK, string Message, T Data) LoadJson<T>(string fileName, string filePath) where T : new()
{
try
{
var result = LoadText(fileName, filePath);
if (!result.OK)
{
return (false, result.Message, default(T));
}
T data = JsonUtility.FromJson<T>(result.Content);
if (data == null)
{
return (false, "Ошибка десериализации JSON", default(T));
}
return (true, $"JSON успешно загружен: {fileName}", data);
}
catch (Exception ex)
{
Debug.LogError($"Ошибка при загрузке JSON: {ex.Message}");
return (false, $"Ошибка загрузки JSON: {ex.Message}", default(T));
}
}
public static (bool OK, string Message, T Data) LoadJson<T>(string fileName, AppDirectory directory) where T : new()
{
return LoadJson<T>(fileName, GetDirectoryName(directory));
}
public enum AppDirectory
{
Streaming,
Persistent
}
}