Unity构建版本中获取exe所在目录向上一级父文件夹路径的方法
问题根因
- Unity Windows构建后,
Application.dataPath指向的是exe同级的<应用名>_Data目录,对应你的目录结构就是ParentFolder/MainFolder/UnityApp_Data,你只拼接一层/../只会定位到MainFolder,自然拿不到目标ParentFolder。 - 原代码存在逻辑错误:手动拼接路径斜杠存在跨系统兼容风险,且
RootFolder的判断逻辑完全倒置,会出现变量非空时返回硬编码/计算路径、变量为空时才返回空值的异常表现。 - 直接拼接的相对路径不会自动解析为绝对路径,部分系统API读取时可能识别失败。
修正方案
调整后完整代码:
private string GetDirectory() { // RootFolder为自定义路径配置变量,优先使用配置值 if (!string.IsNullOrEmpty(RootFolder)) return RootFolder; #if UNITY_EDITOR // 编辑器下返回硬编码的父目录路径 return "C:/Users/admin/source/ParentFolder/"; #else // 第一步:取UnityApp_Data的上级目录,即exe所在的MainFolder string mainFolder = Directory.GetParent(Application.dataPath).FullName; // 第二步:取MainFolder的上级目录,即目标ParentFolder string parentFolder = Directory.GetParent(mainFolder).FullName; // 规范化路径格式,避免斜杠混乱 return Path.GetFullPath(parentFolder); #endif }
额外注意事项
- 不要手动拼接
/../这类相对路径,使用Directory.GetParent或者Path.Combine这类系统提供的API处理路径,天然适配不同系统的斜杠规则。 - 如果你的程序会被安装到
Program Files这类系统级保护目录,读取/写入上级目录需要程序获得管理员权限,否则会触发权限报错。 - 本方案默认适用于Windows构建版本,如需兼容macOS/Linux平台,需要额外适配对应平台的构建后路径规则。
内容的提问来源于stack exchange,提问作者Vika
相关产品推荐
相关产品推荐

