从 HFS 字符串创建文件对象
Creating a file object from an HFS string
我正在通过各种在线文章和 yt 教程学习 AppleScript,并且我对整个文件和别名主题都一知半解。
根据这个 guide,(清单 15.8)我应该能够用行
创建一个文件对象
set theFile to file "Macintosh HD:Users:yourUserName:Desktop:My File.txt"
这会引发错误
Script Editor error
我进行了大量谷歌搜索,只找到 one reference 个问题:
Oddly, you can't assign a file object specifier to a variable, or return it as a value. If you try, you get a runtime error message:
set x to file "feathers:Users:mattneub:"
-- error: Can't make file "feathers:Users:mattneub:" into type reference
Instead, you must generate a reference to the file object, like this:
set x to a reference to file "feathers:Users:mattneub:"
x -- file
"feathers:Users:mattneub:" of «script»
在 AppleScript Language Guide 中,通过伪 class POSIX file
创建了一个 file
对象
Working With Files
AppleScript uses file objects to represent files in
scripts. A file object can be stored in a variable and used throughout
a script. The following script first creates a file object for an
existing file in the variable notesFile, then uses the variable in a
tell statement that opens the file:
set notesFile to POSIX file "/Users/myUser/Feb_Meeting_Notes.rtf"
tell application "TextEdit" to open notesFile
我觉得这很奇怪!
据我了解,文件对象中的文件路径存储为 HFS,所以如果我想从 HFS 字符串创建文件对象,我需要
- 从 HFS 字符串创建一个 POSIX 路径
- 将 POSIX 路径放入 POSIX 文件
其中returns一个文件对象,路径再次存储为HFS字符串!
(虽然显然 POSIX 文件甚至不输出文件对象,而是一个文件 URL?!)
我的问题简而言之:为什么我不能通过将文件附加到 HFS 字符串来将变量设置为文件对象,如上面引用的清单 15.8 中所示? 我是否总是必须通过 POSIX 路径和 POSIX 文件?.
我想知道代码是否真的有效,只是它本身不行?我实际上还没有弄清楚为什么我需要或如何使用文件对象,所以我的理解可能是零散的...
在关于 POSIX 和 HFS 路径以及别名之间转换的教程中,我决定尝试将别名转换为文件对象并打开了这个蠕虫罐头。
非常感谢任何帮助,即使答案是:您永远不需要这样做,所以请忽略它!
这里你不明白说明书是怎么解释的。清单 15.8 准确地显示了使用 旧类型文件说明符 (file) 创建文件引用的错误尝试。这个说明符是过去遗留下来的,用于 AppleScript 命令,例如 read 和 write.
手册清楚地显示了从 HFS 路径正确创建旧类型文件引用(文件):
set theFile to a reference to file "Macintosh HD:Users:yourUserName:Desktop:My File.txt"
稍后,您可以随时通过 AppleScript 命令 read 和 write 使用 this reference .例如:
read theFile
此外,手册明确指出 还可以 使用 read 或 write 命令而不首先创建一个单独的文件引用(变量 theFile 在你的情况下)。可以这么说,“即时”阅读或写作:
read file "Macintosh HD:Users:yourUserName:Desktop:My File.txt"
简短版本:AppleScript 是一个绝对的垃圾文件。
更长的版本:AppleScript 重载对象说明符以执行 2 个截然不同的任务:
assemble 识别应用程序中数据的复杂查询,例如(在 Finder 中)file "bar" of folder "Downloads" of home
、
创建原始 AppleScript 类型的新实例,例如alias "Macintosh HD:Users:foo:Downloads:bar:"
.
Pre OS X,file STRING
说明符是语法 shorthand for file specification STRING
,它创建了 AS 的 file specification
类型的新实例(#2 ).由于其技术限制,该类型在 OS X 中已被弃用和删除,但无论出于何种原因,构造它的 file STRING
说明符被保留 in-place 并被保留,以便至少一些应用程序将接受结果查询 (#1) 作为原始文件类型 (alias
, POSIX file
).
的替代
因此,如果您现在编写 [tell APPLICATION to] open file STRING
,该语法 [通常] 有效,因为 AS 将 file STRING
查询 as-is 传递给应用程序的 open
命令进行处理。而如果你写 set f to file STRING
,那会失败,因为 AS 不再知道如何为自己解析 file STRING [of AppleScript]
查询。
再一次,这一切都非常令人困惑,如果 Mac 自动化团队正确实施 POSIX file
并在 15 年前将所有人从那些不可靠的 HFS 路径中迁移出来,整个混乱本可以完全避免苹果脚本 2.0。但是,如果通向地狱的道路是用善意铺成的,那么 AppleScript 语法就是沿途散布的路障。
根据经验,如果您可以使用 POSIX file
类型并完全避免遗留的 HFS 混乱,您将全面避免很多痛苦:
set f to "/Users/foo/Downloads/bar/" as POSIX file -- convert string to file type
set p to POSIX path of f -- convert file to string type
注意使用强制转换 (STRING as POSIX file
) 而不是对象说明符 (POSIX file STRING
);强制是两者中麻烦较小的一个。
是的,POSIX file
无法正常工作,一些特别古老的 Mac 应用程序仍然坚持使用 HFS paths/types,即使 HFS 已被弃用 15 年以上。但是 AppleScript 已经到了生命周期的尽头,负责它的 Mac 自动化团队早已解散,所以你只需要在你仍然拥有它的时候充分利用你所拥有的废话。
TL;DR:您会明白为什么我将简短版本放在顶部。
我正在通过各种在线文章和 yt 教程学习 AppleScript,并且我对整个文件和别名主题都一知半解。
根据这个 guide,(清单 15.8)我应该能够用行
创建一个文件对象set theFile to file "Macintosh HD:Users:yourUserName:Desktop:My File.txt"
这会引发错误
Script Editor error
我进行了大量谷歌搜索,只找到 one reference 个问题:
Oddly, you can't assign a file object specifier to a variable, or return it as a value. If you try, you get a runtime error message:
set x to file "feathers:Users:mattneub:"
-- error: Can't make file "feathers:Users:mattneub:" into type referenceInstead, you must generate a reference to the file object, like this:
set x to a reference to file "feathers:Users:mattneub:"
x -- file "feathers:Users:mattneub:" of «script»
在 AppleScript Language Guide 中,通过伪 class POSIX file
file
对象
Working With Files
AppleScript uses file objects to represent files in scripts. A file object can be stored in a variable and used throughout a script. The following script first creates a file object for an existing file in the variable notesFile, then uses the variable in a tell statement that opens the file:set notesFile to POSIX file "/Users/myUser/Feb_Meeting_Notes.rtf"
tell application "TextEdit" to open notesFile
我觉得这很奇怪!
据我了解,文件对象中的文件路径存储为 HFS,所以如果我想从 HFS 字符串创建文件对象,我需要
- 从 HFS 字符串创建一个 POSIX 路径
- 将 POSIX 路径放入 POSIX 文件
其中returns一个文件对象,路径再次存储为HFS字符串!
(虽然显然 POSIX 文件甚至不输出文件对象,而是一个文件 URL?!)
我的问题简而言之:为什么我不能通过将文件附加到 HFS 字符串来将变量设置为文件对象,如上面引用的清单 15.8 中所示? 我是否总是必须通过 POSIX 路径和 POSIX 文件?.
我想知道代码是否真的有效,只是它本身不行?我实际上还没有弄清楚为什么我需要或如何使用文件对象,所以我的理解可能是零散的...
在关于 POSIX 和 HFS 路径以及别名之间转换的教程中,我决定尝试将别名转换为文件对象并打开了这个蠕虫罐头。
非常感谢任何帮助,即使答案是:您永远不需要这样做,所以请忽略它!
这里你不明白说明书是怎么解释的。清单 15.8 准确地显示了使用 旧类型文件说明符 (file) 创建文件引用的错误尝试。这个说明符是过去遗留下来的,用于 AppleScript 命令,例如 read 和 write.
手册清楚地显示了从 HFS 路径正确创建旧类型文件引用(文件):
set theFile to a reference to file "Macintosh HD:Users:yourUserName:Desktop:My File.txt"
稍后,您可以随时通过 AppleScript 命令 read 和 write 使用 this reference .例如:
read theFile
此外,手册明确指出 还可以 使用 read 或 write 命令而不首先创建一个单独的文件引用(变量 theFile 在你的情况下)。可以这么说,“即时”阅读或写作:
read file "Macintosh HD:Users:yourUserName:Desktop:My File.txt"
简短版本:AppleScript 是一个绝对的垃圾文件。
更长的版本:AppleScript 重载对象说明符以执行 2 个截然不同的任务:
assemble 识别应用程序中数据的复杂查询,例如(在 Finder 中)
file "bar" of folder "Downloads" of home
、创建原始 AppleScript 类型的新实例,例如
alias "Macintosh HD:Users:foo:Downloads:bar:"
.
Pre OS X,file STRING
说明符是语法 shorthand for file specification STRING
,它创建了 AS 的 file specification
类型的新实例(#2 ).由于其技术限制,该类型在 OS X 中已被弃用和删除,但无论出于何种原因,构造它的 file STRING
说明符被保留 in-place 并被保留,以便至少一些应用程序将接受结果查询 (#1) 作为原始文件类型 (alias
, POSIX file
).
因此,如果您现在编写 [tell APPLICATION to] open file STRING
,该语法 [通常] 有效,因为 AS 将 file STRING
查询 as-is 传递给应用程序的 open
命令进行处理。而如果你写 set f to file STRING
,那会失败,因为 AS 不再知道如何为自己解析 file STRING [of AppleScript]
查询。
再一次,这一切都非常令人困惑,如果 Mac 自动化团队正确实施 POSIX file
并在 15 年前将所有人从那些不可靠的 HFS 路径中迁移出来,整个混乱本可以完全避免苹果脚本 2.0。但是,如果通向地狱的道路是用善意铺成的,那么 AppleScript 语法就是沿途散布的路障。
根据经验,如果您可以使用 POSIX file
类型并完全避免遗留的 HFS 混乱,您将全面避免很多痛苦:
set f to "/Users/foo/Downloads/bar/" as POSIX file -- convert string to file type
set p to POSIX path of f -- convert file to string type
注意使用强制转换 (STRING as POSIX file
) 而不是对象说明符 (POSIX file STRING
);强制是两者中麻烦较小的一个。
是的,POSIX file
无法正常工作,一些特别古老的 Mac 应用程序仍然坚持使用 HFS paths/types,即使 HFS 已被弃用 15 年以上。但是 AppleScript 已经到了生命周期的尽头,负责它的 Mac 自动化团队早已解散,所以你只需要在你仍然拥有它的时候充分利用你所拥有的废话。
TL;DR:您会明白为什么我将简短版本放在顶部。