unity 可获取的路径、相对/绝对路径转换、获取路径中的文件信息
以下所有信息基于Windows 10 环境下:
Debug.Log(System.IO.Directory.GetCurrentDirectory()); // 输出:E:\kingBook\projects\unity_swfParse ,注意此方法可能通过 Directory.SetCurrentDirectory(path); 进行设置
Debug.Log(System.Environment.CurrentDirectory); //获取到本地工程的绝对路径,如:E:\kingBook\projects\unity_swfParse
Debug.Log(Application.dataPath); //Assets资源文件夹的绝对路径,如:E:/kingBook/projects/unity_swfParse/Assets
Debug.Log(Application.persistentDataPath); //持久性的数据存储路径,在不同平台路径不同,但都存在,绝对路径,如:C:/Users/Administrator/AppData/LocalLow/DefaultCompany/unity_swfParse
Debug.Log(Application.streamingAssetsPath); //Assets资源文件夹下StreamingAssets文件夹目录的绝对路径,如:E:/kingBook/projects/unity_swfParse/Assets/StreamingAssets
Debug.Log(Application.temporaryCachePath); //游戏运行时的缓存目录,也是绝对路径,如:C:/Users/ADMINI~1/AppData/Local/Temp/DefaultCompany/unity_swfParse
Debug.Log(FileUtil.GetUniqueTempPathInProject()); // 在项目获取唯一的临时路径,如:Temp/UnityTempFile-37809c96cee663445afef3af8c6fc810
- 相对/绝对路径的转换
// 绝对路径 -> 相对路径
string swfPath = "E:/kingBook/projects/unity_swfParse/Assets/test.swf";
string swfRelativePath = FileUtil.GetProjectRelativePath(swfPath);
Debug.Log(swfRelativePath); // 输出:Assets/test.swf
string swfRelativePath2 = System.IO.Path.GetRelativePath(System.Environment.CurrentDirectory, swfPath); // 此方法可以指定相对于哪个文件夹,注意路径的斜杠固定为(\),不管两个参数中的路径使用哪一个斜杠都一样
Debug.Log(swfRelativePath2); // 输出:Assets\test.swf
// 相对路径 -> 绝对路径
string fullPath = System.IO.Path.GetFullPath(swfRelativePath);
Debug.Log(fullPath); // 输出:E:\kingBook\projects\unity_swfParse\Assets\test.swf
string logicalFullPath = FileUtil.GetLogicalPath(fullPath);
Debug.Log(logicalFullPath); // 输出:E:/kingBook/projects/unity_swfParse/Assets/test.swf
- 转换路径中的斜杠
// 物理路径:正斜杠(\), 如: E:\kingBook\projects\unity_swfParse
// 逻辑路径:反斜杠(/), 如: E:/kingBook/projects/unity_swfParse
Debug.Log(System.Environment.CurrentDirectory); //获取到本地工程的绝对路径(物理路径),输出:E:\kingBook\projects\unity_swfParse
// 物理路径 -> 逻辑路径
string logicalPath = FileUtil.GetLogicalPath(System.Environment.CurrentDirectory);
Debug.Log(logicalPath); // 输出:E:/kingBook/projects/unity_swfParse
// 逻辑路径 -> 物理路径
string physicalPath = FileUtil.GetPhysicalPath(logicalPath);
Debug.Log(physicalPath); // 输出:E:/kingBook/projects/unity_swfParse,依然是逻辑路径,可能是bug
- 获取路径中的文件名、扩展名、所在的文件夹
string path = "Assets/Demo/test.swf";
Debug.Log(System.IO.Path.GetDirectoryName(path)); // 注意斜杠,输出:Assets\Demo
Debug.Log(System.IO.Path.GetFileName(path)); // 输出:test.swf
Debug.Log(System.IO.Path.GetFileNameWithoutExtension(path)); // 输出:test
Debug.Log(System.IO.Path.GetExtension(path)); // 输出:.swf