var questionNames = new List<string>();
var stringBuilder = StringBuilderCache.Get();
stringBuilder.Clear();
stringBuilder.Append(Application.dataPath);
stringBuilder.Append("/Art/System/General_UI/Group/Questionbox/UIMaps/portrait");
string path = stringBuilder.ToStringRecycle();
//files:G:/PlotEditor/Assets/Art/System/General_UI/Group/Questionbox/UIMaps/portrait\Alan\Scolding.png ...
string[] files = Directory.GetFiles(path, "*.png", SearchOption.AllDirectories); //拿到某路径下,某类型的文件的路径
for (int i = 0; i < files.Length; i++) {
string file = files[i];
// name :Scolding.png
string name = Path.GetFileName(file); //获取文件名(也可不带后缀)
// directoryName :G:/PlotEditor/Assets/Art/System/General_UI/Group/Questionbox/UIMaps/portrait/Alan
string directoryName = Path.GetDirectoryName(file)?.Replace('\\', '/'); //获取父文件路径 ,
//注意要把通过接口获取的路径中的"\\"替换一下。
string parentName = directoryName?.Substring(directoryName.LastIndexOf('/') + 1); //获取父文件夹名
stringBuilder.Clear();
stringBuilder.Append(parentName);
stringBuilder.Append("/");
stringBuilder.Append(name);
questionNames.Add(stringBuilder.ToStringRecycle());
}
return questionNames;
例子中的文件结构
上面这一段代码的目的是获取文件及其父文件夹的相对路径。例:G:/PlotEditor/Assets/Art/System/General_UI/Group/Questionbox/UIMaps/portrait/Alan/Scolding.png 希望获取的结果是
Alan\Scolding.png。
directoryName.LastIndexOf('/') + 1 //获取string中最后一个出现”/“的位置,配合directoryName?.Substring(directoryName.LastIndexOf('/') + 1) 获取到的就是最后在”/“后出现的字符串