gpt4 book ai didi

file-io - 在项目中查找其 .cs 文件的类

转载 作者:行者123 更新时间:2023-11-30 22:14:02 24 4
gpt4 key购买 nike

如何通过代码在项目中找到包含指定类的.cs文件?

我想它可能看起来像这样:

string pathToFoo = ClassFileFinder.FindClassPath(typeof(Foo));

最佳答案

我已经根据我在评论中发现的一些想法编写并测试了该类(class)。它工作得相当快,到目前为止我还没有发现任何问题。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;

public static class ClassFileFinder
{
static List<string> classFiles;

public static ClassFileDetails FindClassFile(System.Type t)
{
return FindClassFile(t.Name);
}

public static ClassFileDetails FindClassFile(string className)
{
ClassFileDetails details = DatabaseLink.GetClassFileDetails(className);
if (details == null)
{
//Lookup class name in file names
classFiles = new List<string>();
FindAllScriptFiles(Application.dataPath);
Debug.Log(classFiles.Count);
for (int i = 0; i < classFiles.Count; i++)
{
if (classFiles[i].Contains(className))
{
details = new ClassFileDetails(className, classFiles[i], File.GetLastAccessTimeUtc(classFiles[i]));
}
}
//Lookup class name in the class file text
if (details == null)
{
for (int i = 0; i < classFiles.Count; i++)
{
string codeFile = File.ReadAllText(classFiles[i]);
if (codeFile.Contains("class " + className))
{
details = new ClassFileDetails(className, classFiles[i], File.GetLastAccessTimeUtc(classFiles[i]));
}
}
}
if (details == null)
{
Debug.LogWarning("Failed to lookup class file for class " + className);
}
return details;
}
else
{
return details;
}
}

static void FindAllScriptFiles(string startDir)
{
try
{
foreach (string file in Directory.GetFiles(startDir))
{
if (file.Contains(".cs") || file.Contains(".js"))
classFiles.Add(file);
}
foreach (string dir in Directory.GetDirectories(startDir))
{
FindAllScriptFiles(dir);
}
}
catch (System.Exception ex)
{
Debug.Log(ex.Message);
}
}
}

public class ClassFileDetails
{
public int OID { get; set; }
public string className { get; set; }
[Sqo.Attributes.UniqueConstraint]
public string path { get; set; }
public System.DateTime updateTime { get; set; }

internal ClassFileDetails()
{ }
internal ClassFileDetails(string setClassName, string setPath, System.DateTime setUpdateTime)
{
className = setClassName;
path = setPath;
updateTime = setUpdateTime;

DatabaseLink.StoreClassFileDetails(this);
}

关于file-io - 在项目中查找其 .cs 文件的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18697865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com