在 aardio 中,相对于易受系统环境干扰的当前工作目录(./ 或 .\),aardio 提供了一套更可靠的内置路径解析机制。
aardio 规定了两种特殊的路径标识符:
应用级虚拟绝对路径(Virtual Absolute Path)
/ 或单反斜杠 \ 作为前导首字符。应用程序基准目录(Runtime Application Base Directory) 是 aardio 解析相对路径的核心锚点。该目录在生命周期内具有不可变性(仅在创建线程或纤程时可以自定义,运行时无法篡改),其具体指向会根据运行上下文自动确定:
fiber.create(func, appBaseDir)):可由 appBaseDir 参数 自定义。可执行文件目录路径(Executable Directory Path)
~/ 或 ~\ )作为前缀。aardio.exe 所在目录)。aardio 内部仍将单个
~前导的路径处理为 EXE 根目录路径,但不再建议这样写(请改用更明确的~/或~\前缀)。
适用范围: aardio 中基本所有需要用到文件路径参数的方法、属性或功能 —— 如
string.load,string.save等内置库或标准库函数、文件包含操作符($)、UI 控件的图片路径均原生支持上述路径语法。
在部分资源加载场景下,aardio 为 ~/ (EXE 目录) 提供了智能的路径退化策略:
当路径以 ~/ 或 ~\ 开头,但在 EXE 目录下并未找到对应的实际文件时,引擎会自动将其前缀降级转换为 / 或 \,转而在应用程序基准目录下进行二次寻址重试。
支持此退化机制的指令与函数包括:
$ (例如 $"~/res/config.json")raw.loadDll(path)string.load(path)string.loadBuffer(path)将使用了 aardio 专用格式的文件路径传入外部接口(例如 DLL 导入的 API,COM 控件对象接口)前应进行转换,常用转换方法:
io.fullpath(path) 将 path 参数转换为绝对路径。io.localpath(path) || path 仅在 path 参数是以单个\、/或 ~字符开始的文件路径才会转换为绝对路径,否则直接返回。io.joinpath2(baseDir,subPath) 将参数 @baseDir 指定的目录作为基准目录,即使 @subPath 以 ~ 或单个 /、\ 开始仍会视为相对路径并执行拼接。io.fullpath2(path,baseDir) 将参数 @baseDir 指定的目录作为基准目录,即使 @path 以 ~ 或单个 /、\ 开始仍会视为相对路径并执行拼接,然后再转换为绝对路径。函数原型:
绝对路径 = io.localpath( 相对路径 )
函数说明:
如果参数指定的文件路径使用了 aardio 专用格式则转换为系统支持的完整路径,否则返回空值。
转换规则如下:
\\ 开始,不作转换直接返回 null 空值。// 开始,移除第一个斜杠后返回,不作其他转换,可用于表示系统分区根目录。\ / 字符开始,将参数作为 aardio 应用程序基准目录下的相对路径转换为完整路径。如果文件路径以 ~/ 或 ~\ 开始,将参数作为当前启动 EXE 根目录下的相对路径转换并返回完整路径。
此函数仍将单个
~前导的路径处理为 EXE 根目录路径,但不再建议这样写(请改用更明确的~/或~\前缀)。
其他格式路径不作转换返回 null 空值。
函数原型:
绝对路径 = io.fullpath( 相对路径 )
函数说明:
io.fullpath 将输入参数指定的相对路径转换为绝对路径。
转换规则如下:
\\ 开始,不作转换直接返回,路径前加 \\?\ 可避免转换并支持畸形路径。// 开始,移除第一个斜杠后返回,不作其他转换,可用于表示当前分区根目录。注意 string.save,io.file 等函数并不支持这种写法。\ 或/ 字符开始的应用级虚拟绝对路径(Virtual Absolute Path),则会作为 aardio 应用程序基准目录下(Runtime Application Base Directory)的相对路径转换为完整路径。 如果文件路径以 ~/ 或 ~\ 开始,作为当前运行的 EXE 根目录下的相对路径转换并返回完整路径。
此函数仍将单个
~前导的路径处理为 EXE 根目录路径,但不再建议这样写(请改用更明确的~/或~\前缀)。
其他路径按系统规则转换为完整路径。
传入空字符串或空值返回 null 。
此函数并不会检测路径是否存在,但会检测参数是否正确的路径名,并纠正错误的写法,例如将正斜杠修正为反斜杠。
aardio 自带的文件操作函数基本都会自动调用 io.fullpath 转换参数传入的文件路径。
但是要注意在文件路径开始以 ~/ 或 ~\ 表示 EXE 启动目录以及用单个前导 \ 或 / 表示 aardio 应用程序基准目录的写法仅适用于 aardio,其他外部组件或外部接口并不支持,我们需要调用 io.fullpath 将 aardio 路径转换为其他外部程序可以识别的绝对路径。
调用示例:
var path = io.fullpath( "/res/test.jpg" )
函数原型:
fullpath = io.fullpath2(path,baseDir)
函数说明:
如果参数 @path 为 null 则返回 null 。
如果未指定参数 @baseDir 则将 @path 转换为绝对路径。
否则调用 io.joinpath2 拼接并转换为绝对路径。
拼接规则如下:
\\开始的绝对路径则直接返回,//开始的路径转换为单个斜杆开始的路径后返回,~ 或单个 /、\ 开始仍会执行拼接。调用示例:
var path = io.fullpath2( "/example/test.jpg","/base-dir/" )
函数原型:
fullpath = io.joinpath( dir,... )
函数说明:
用于拼接任意多个文件路径。
此函数可以避免文件路径首尾连接处缺少、或多余反斜杠的问题。
此函数首先会将斜杠自动转换为反斜杠。
如果连接的非空路径之间没有至少一个反斜杠,则添加反斜杠。
如果连接处双方都有反斜杠,则去掉其中一个。
调用示例:
var path = io.joinpath(dir,subdir,"test.txt");
❌ 错误用法: dir ++ subdir ++ "test.txt"
✅ 正确用法: io.joinpath(dir,subdir,"test.txt")
函数原型:
path = io.joinpath2(baseDir,subPath)
函数说明:
拼接路径。
如果 @baseDir 为 null 则直接返回 @subPath,
否则@baseDir 与 @subPath 都必须指定字符串。
如果 @subPath 是以盘符、\\、//开始的绝对路径则直接返回。
否则调用 io.joinpath 拼接 @baseDir 与 @subPath 。@subPath 以 ~ 或单个 /、\ 开始仍会执行拼接。
io.joinpath 则支持不定个数参数,但只做简单拼接,不识别绝对路径。io.joinpath 与 io.joinpath2 都不会调用 io.fullpath 将返回值转换为绝对路径
调用示例:
var path = io.joinpath2("/base-dir/","/example/test.jpg");
函数原型:
fullpath = io.exist( path,mode )
函数说明:
指定的文件路径参数 @path 如果不是字符串、不是一个合法的路径、或是一个空字符串时该函数返回 null 值。否则,此函数调用 io.fullpath 将文件路径转换为绝对路径,如果文件存在返回绝对路径,否则返 回 null 。
参数 @mode 用于添加检测条件,可选值如下:
传入错误的参数 @path 时,io.exist 不会抛出异常,而是返回 null 值。
null 在条件表达式中可以转换为 false , 表示条件假值。
调用示例:
var fullpath = io.exist( "/res/test.jpg" );
if(!fullpath){
error("文件不存在")
}
函数原型:
var pathInfo = io.splitpath( filepath )
函数说明:
该函数拆分参数 filepath 指定的文件路径为多个部分,并返回包含这些拆分部分的对象 pathInfo 。
pathInfo 有以下成员:
pathInfo.dir ++ pathInfo.file 等于完整的文件路径。调用示例:
//新建一个控制台程序,main.aardio 代码如下
//将参数去掉引号
var path = string.trim( _CMDLINE ,'"');
//拆分为目录名,文件名,后缀名,分区号
var pathInfo = io.splitpath(path)
//重命名
io.rename( path,pathInfo.dir ++ pathInfo.ext )
//发布该程序为 exe 文件,将需要去掉文件名字的文件 - 往该 exe 上一拖即可.
只读属性,返回启动主程序的exe文件路径,开发环境中此属性返回 aardio.exe 的完整文件路径。
只读属性,返回启动主程序的 exe 文件所在的目录路径,开发环境中此属性返回 aardio.exe 所在的目录路径。
只读属性,返回启动主程序的 exe 文件名