14 9月, 2016

文件操作

内容纲要

Alias类型

Alias就是文件的一个指针,它指向的某个实际的文件,但Alias本身不是文件(因为它只记录文件的ID),请特别注意:它不同于windows的快捷方式---记录文件的路径! Mac OS的Alias是记录文件的唯一识别码,即使文件被移动了,Alias替身仍然可以准确指向本来所指的文件。
AppleScript也提供了传统的file类型,但是在一般情况下,我们总是使用alias,而不是file来实现文件操作---file类型多用于操作尚不存在的文件。
在AppleScript中创建Alias类型的数据是非常容易的:只需要在alias关键词后加上路径---text类型的,以冒号为分隔符的完整路径,举例如下:

set myAlias1 to alias "Macintosh HD:System:Library:CoreServices:Finder.app:"
set myAlias2 to alias "Macintosh HD:Users:Nathan:Desktop:example.txt"

相对路径和POSIX路径

当编写的一段脚本需要放到其他电脑上运行时,往往会因为系统盘名称或者是用户名的不同而让你不知所措---AppleScript无法找到你想要的文件。绝对路径的缺点就在于此。

相对路径 path to命令

在Mac OS中,有很多文件夹具有特殊地位,如用户的文档文件夹(Documents)、系统的资源库(Library)、应用程序文件夹(Application)等等,这些文件夹经常会被使用到,而用绝对路径来表达它们的位置显然会产生可移植性问题。
AppleScript中提供的path to命令就是用来解决这个问题的:

path to documents folder   --返回当前用户的“文档”文件夹绝对路径alias
path to library folder from system domain     --返回系统的“资源库”绝对路径alias

可以使用path to命令来获得的文件夹非常多,如application supportapplications folderdesktopdocuments folderdownloads foldersystem folder等等(请参与AppleScript字典)。 from 指定了文件夹所属的域,之所以要指定域是因为类似资源库(Library)文件夹在系统中存在不只一个(用户的、系统的、本地的等等)。常用user domain(默认缺省值)system domain 和 local domain

POSIX路径和POSIX file类型

POSIX全称“Portable Operating System Interface of Unix”,是IEEE的标准之一。
POSIX路径(path)只是POSIX中一个很小的部分,该路径用斜杠(/)分隔层次---注意不是windowds的反斜杠(\)。 它具有简明性和相对性的特点,也可以用来避免绝对路径的致命缺陷。
AppleScript提供了POSIX路径的支持:

POSIX path of alias "Macintosh HD:System:Library:CoreServices:Finder.app"
--返回“/System/Library/CoreServices/Finder.app/”
POSIX file "/Users/Nathan/Desktop/example.txt"
--返回file“Macintosh HD:Users:Nathan:Desktop:example.txt”

其中:   POSIX path of 命令用于获取POSIX格式的路径
        POSIX file 是一个类型,和alias相似,只是它是用POSIX的方式来操作文件。

POSIX路径是一个比较麻烦的问题,实际编写脚本时尽量使用alias结合path to命令来实现功能,尤其要避免POSIX file 和 alias混用的情况。

文件读取

AppleScript的文件读取,只要一个命令:read就行了。

set myFile to alias "Macintosh HD:Users:Nathan:Desktop:example.txt"
read myFile

这个最简单的格式将会返回包含文件中所有内容的text类型数据。
只需要加上几个限定,我们就可以让read命令变得更听话些:

  • from 整数 指定从哪个位置开始读取(位置指‘字节数’)
  • for 整数 指定读取多少个字节
  • to 整数 指定读取到哪个位置为止
  • before 文本 指定读取到文本所指定的关键字为止(不含本身
  • until 文本 同上,但包含本身
  • using delimiter 文本 指定分隔符读取成list类型的数据,这里参数也可是由文本组成的list
  • as 类型 指定读取成何种数据类型,如text、list

在这里有必须要提一下文件结尾(end of file),如果文件是空得,在尝试读取时,会让AppleScript抛出文件结尾错误。因此,在读取文件之前,应该养成先确定文件长度的习惯,AppleScript中使用get eof命令(后直接跟alias类型的参数)。

文件写入

文件写入,相比读取总要麻烦许多,AppleScript尽管已经为用户尽量减少了很多工作,但是仍然需要我们记住一下基本的读取流程:打开文件 → 写入数据 → 关闭文件

set aFile to alias "Macintosh HD:Users:Nathan:Desktop:example.txt"
set fp to open for access aFile with write permission   --打开文件
write "abc" to fp       --写入数据
close accsess fp        --关闭文件

简单来说,要写入一个文件,首先要open for access with write permission,然后使用write to命令,最后还要close access。此外,write命令可以指定starting at参数(开始写入的位置)。

关于文件的打开和关闭:在介绍文件读取时,并没有提到代开和关闭,但事实上我们应该在读取之前先打开文件(open for access),并在读取完毕之后正确关闭它(close access)。 如果读取文件之前没有关闭它,当你之后需要写入数据时,会发现根本没法打开写入权限,AppleScript会告知文件已经打开却没有给你写入权限!总之一句话:对于任何文件操作,必须要先打开再操作,最后要关闭!

set myAlias to alias ((path to desktop as string) & "TempScript")
set fileLongth to get eof myAlias
if fileLongth > 0 then
    set fpRead to open for access myAlias
    set contentFile to read fpRead for 50 using delimiter "2" as text
    close access fpRead


    set fp to open for access myAlias with permission
    write contentFile to fp
    write contentFile to fp
    close access fp


else
end if

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注