Files
plugin-library/Assets/00.StaryEvo/Editor/Res/FileGet.cs
2025-03-31 11:16:52 +08:00

132 lines
4.8 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.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using UnityEditor;
using UnityEngine;
namespace Stary.Evo.Editor
{
public static class FileGet
{
public static void CreateContent(StringBuilder variable, string path, string tab)
{
tab += "\t\t";
DirectoryInfo dir = new DirectoryInfo(path);
DirectoryInfo[] first = dir.GetDirectories();
FileInfo[] fil = dir.GetFiles();
if (first.Length > 0)
{
foreach (FileInfo f in fil)
{
CreateFile(variable, f, tab);
}
foreach (DirectoryInfo f in first)
{
CreateFolder(variable, f, tab);
}
}
else
{
foreach (FileInfo f in fil)
{
CreateFile(variable, f, tab);
}
}
}
/// <summary>
/// 生成脚本文件
/// </summary>
/// <param name="className">类名</param>
/// <param name="content">字符串事件</param>
public static void CreateClass(string className, string package, string outputPath,
Action<StringBuilder> content = null)
{
string tdClassName = className;
StringBuilder variable = new StringBuilder();
//variable.Append("using System;\n");
variable.Append("namespace " + "R" + "\n");
variable.Append("{\n");
variable.Append("\tpublic class " + tdClassName + "\n");
variable.Append("\t{\n");
variable.Append("\t\tpublic class " + package + "\n");
variable.Append("\t\t{\n");
content?.Invoke(variable);
variable.Append("\t\t}\n");
variable.Append("\t}\n");
variable.Append("}");
outputPath = $"{outputPath}/{tdClassName}.cs";
if (File.Exists(outputPath))
{
File.Delete(outputPath);
}
FileHelper.WriteFile(outputPath, variable.ToString());
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
/// <summary>
/// 文件夹生成
/// </summary>
/// <param name="folderName"></param>
private static void CreateFolder(StringBuilder variable, DirectoryInfo folderName, string tab)
{
string classname = FilesUtils.ChineseToPinYin(folderName.Name, false);
variable.Append(tab + " public static class " + classname + "\n");
variable.Append(tab + "{\n");
CreateContent(variable, folderName.FullName, tab);
variable.Append(tab + "}\n");
}
/// <summary>
/// 文件生成
/// </summary>
/// <param name="fileName"></param>
private static void CreateFile(StringBuilder variable, FileInfo fileName, string tab)
{
var fullname =System.IO.Path.GetExtension(fileName.FullName);
if (fullname != ".meta"&&fullname!=".hint" )
{
Debug.Log("FileInfo" + fileName.Name);
string[] fileSplit = fileName.FullName.Split(new string[] { "AddressableRes\\" },
StringSplitOptions.RemoveEmptyEntries);
string[] resSplit = fileSplit[fileSplit.Length - 1].Split('\\');
// fileSplit = fileName.FullName.Split(new string[] { $"AddressableRes\\{resSplit[0]}\\" },
// StringSplitOptions.RemoveEmptyEntries);
// string filepath = fileSplit[fileSplit.Length - 1].Replace("\\", "/");
// // 删除文件后缀
// filepath = Path.Combine(
// Path.GetDirectoryName(filepath),
// Path.GetFileNameWithoutExtension(filepath)
// ).Replace("\\", "/");
// Debug.Log(filepath);
string filepath;
if (MarkAdressable.addressDic.ContainsKey(fileName.FullName))
{
filepath = MarkAdressable.addressDic[fileName.FullName];
}
else
{
Debug.LogError("未找到地址,请检查资源自动化标记逻辑:" + fileName.FullName);
filepath = "";
}
string name = FilesUtils.ChineseToPinYin(fileName.Name.Replace(".", "_"), false)
.Replace(" ", "")
.Replace("-", "_")
.Replace(".", "_"); // 保留点号替换为下划线
variable.Append(tab + "public const string " + name + " = \"" + filepath + "\";\n");
}
}
}
}