实现功能:选中某个文件夹,遍历文件夹下所有的子文件夹和某些文件。
[MenuItem("Assets/Test")]
public static void TEST()
{
string dir = SelectAssetDirectory();//被选中文件夹的路径
Test(dir);
}
private static void TEst(string path)
{
DirectoryInfo direction = new DirectoryInfo(path);
//文件夹下一层的所有子文件
//SearchOption.TopDirectoryOnly:这个选项只取下一层的子文件
//SearchOption.AllDirectories:这个选项会取其下所有的子文件
FileInfo[] files = direction.GetFiles("*", SearchOption.TopDirectoryOnly);
//文件夹下一层的所有文件夹
DirectoryInfo[] folders = direction.GetDirectories("*", SearchOption.TopDirectoryOnly);
for(int i = 0; i < folders.Length; i++)
{
//folders[i].FullName:硬盘上的完整路径名称
//folders[i].Name:文件夹名称
int folderAssetsIndex = folders[i].FullName.IndexOf("Assets");
//从Assets开始取路径
string folderPath = folders[i].FullName.Substring(folderAssetsIndex);
Test(folderPath);//递归遍历所有子文件夹
}
for(int i = 0; i < files.Length; i++)
{
//files[i].FullName:硬盘上的完整路径名称,包括文件名(D:\Project\Test\Assets\Scripts\Font\Test.cs)
//files[i].Name:文件名称 Test.cs"
//files[i].DirectoryName:文件的存放路径(D:\UnityProject\Test\Assets\Scripts\Font\)
if(files[i].Name.EndsWith(".cs"))//取脚本文件
{
//
}
}
}
private static string SelectAssetDirectory()
{
foreach (var obj in Selection.GetFiltered<UnityEngine.Object>(SelectionMode.Assets))
{
var path = AssetDatabase.GetAssetPath(obj);
if (string.IsNullOrEmpty(path))
continue;
if (System.IO.Directory.Exists(path))//选中的是文件夹直接返回文件夹路径
return path;
else if (System.IO.File.Exists(path))
return System.IO.Path.GetDirectoryName(path);//选中的是文件返回父文件夹路径
}
return "Assets";
}
版权声明:本文为w0100746363原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。