脚本错误:无法在Applescript中获取文件?

时间:2017-02-28 01:41:24

标签: applescript

我正在尝试使用applescript创建一个包含预定文本的plist文件。我需要能够将此文本写入文件“plistfile.plist”,但每当我运行脚本时,我都会收到错误“Can't get file (alias "MacintoshHD:Users:myusername:Desktop:plistfile.plist")”。我的剧本是:

set plistfilename to POSIX file "/Users/myusername/Desktop/plistfile.plist" as alias

set ptext to "plist text"

set plist to open for access file plistfilename & "plistfile.plist" with write permission
write ptext to plist
close access file plist

我对这些都不是很熟悉,但我认为这是有道理的。我做了一些谷歌搜索,我没有在其他任何地方找到这个问题。如果有人能让我知道我错过了什么,我会非常感激。

1 个答案:

答案 0 :(得分:1)

代码失败,因为如果文件不存在,强制as alias会抛出错误。

这是将文本写入文件的通常可靠的方法

set plistfilename to (path to desktop as text) & "plistfile.plist"

set ptext to "plist text"

try
    set fileDescriptor to open for access file plistfilename with write permission
    write ptext to fileDescriptor as «class utf8»
    close access fileDescriptor
on error
    try
        close access file plistfilename
    end try
end try

修改

即使您通过.txt扩展程序,也请考虑该脚本的结果是一个简单的.plist文件。

要创建真实属性列表文件,您可以使用System Events

tell application "System Events"
    set rootDictionary to make new property list item with properties {kind:record}
    -- create new property list file using the empty dictionary list item as contents
    set the plistfilename to "~/Desktop/plistfile.plist"
    set plistFile to ¬
        make new property list file with properties {contents:rootDictionary, name:plistfilename}
    make new property list item at end of property list items of contents of plistFile ¬
        with properties {kind:boolean, name:"booleanKey", value:true}
    make new property list item at end of property list items of contents of plistFile ¬
        with properties {kind:string, name:"stringKey", value:"plist text"}
end tell

该脚本创建此属性列表文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>booleanKey</key>
    <true/>
    <key>stringKey</key>
    <string>plist text</string>
</dict>
</plist>