AppleScript引入Foundation框架时open for access报错如何解决
问题描述
调用open for access命令时触发文件错误,报错信息如下:
current application kann nicht in Typ «class fsrf» umgewandelt werden./current application can not be transfer red in type "class fsrf"
报错含义:当前应用无法转换为«class fsrf»类型
复现规律:示例脚本添加use framework "Foundation"声明时运行失败,移除该声明后可正常执行,复现代码:
use scripting additions use framework "Foundation" set path1 to ((path to documents folder) as text) & "GBF:Tbl1:tblGBF.txt" set tabelle to {} set file1 to open for access file (path1) set cc to get eof file1 if cc > 0 then set tabelle to read file1 as list end if close access file1 display dialog (count of tabelle)
故障原因
脚本添加use framework "Foundation"声明后会启用AppleScript-ObjectiveC(ASOC)桥接环境,此时传统AppleScript的file类型构造器会与Foundation框架的文件类产生术语冲突,无法将路径字符串正确转换为open for access等文件操作命令要求的«class fsrf»(文件引用)类型,最终触发类型转换错误。
解决方法
以下两种方案均可修复该问题:
- 方案1:使用
POSIX file构造器替代原有file构造器生成文件引用,该构造器在ASOC环境下无术语冲突问题,修复后完整代码如下:
use scripting additions use framework "Foundation" set path1 to ((path to documents folder) as text) & "GBF:Tbl1:tblGBF.txt" set tabelle to {} set fileRef to POSIX file path1 set file1 to open for access fileRef set cc to get eof file1 if cc > 0 then set tabelle to read file1 as list end if close access file1 display dialog (count of tabelle)
- 方案2:提前将HFS格式路径转换为
alias类型,alias是系统全局识别的文件指针类型,不受框架加载带来的术语冲突影响,仅需修改文件引用生成逻辑:
-- 替换原open for access行前后的对应逻辑 set path1 to ((path to documents folder) as text) & "GBF:Tbl1:tblGBF.txt" set fileAlias to alias path1 set file1 to open for access fileAlias
内容的提问来源于stack exchange,提问作者Otti
相关产品推荐
相关产品推荐

