SPL:文件目录操作

SPL 提供了丰富的针对文件系统的函数,能方便地处理目录以及文件。

1    目录

SPL 用 directory 函数列出文件目录或者文件,并以序列形式返回。用于示例,本机目录 d:/test 下的第一层文件结构如图:

..

以及整个 test 目录下的子目录结构如图:

..

1.1.      列出文件名

directory 函数有诸多选项,用于列出不同条件下的结果。缺省选项时,也即没有任何选项,仅列出指定目录下的所有文件 (不包含子目录),如下表达式:

=directory(“d:/test”)

返回的结果只包含当前目录下的文件,结果如图:

..

1.2.      列出子目录

使用选项 @d 时,则只列出指定目录下的第一级子目录,譬如表达式:

=directory@d(“d:/test”)

返回的结果只包含第一级子目录(不包含文件),如下图:

..

1.3.      列出所有文件或子目录

1.1 和 1.2 节中,仅列出了指定目录的第一级子目录或文件。那如果需要列出所有嵌套子目录或文件,则需要加上选项 @s,如下表达式:

=directory@s(“d:/test”)

返回结果为所有子目录中的文件,由于文件有点多,截取结果的前 10 个内容如图:

..

 

上面表达式列出了指定目录下的所有文件。如果只列出想要的部分类型文件,则可以在表达式中使用通配符,比如 *,?等。比如仅列出扩展名为 png 的图片文件,则可以使用如下表达式:

=directory@s(“d:/test/*.png”)

返回的结果为只包含 png 格式的图片文件名,部分结果如图:

..

 

列出所有子目录的方法类似,使用 @d 选项表示列出目录,再用 @s 选项表示递归搜索全部子目录,表达式如下:

=directory@ds(“d:/test”)

返回所有子目录,结果如图:

..

1.4.      列出绝对路径

当使用 @s 选项列出全部子目录或者文件时,1.3 节中返回的都是只含名称的文件名。而只有文件名时,没法直接操作该文件,这时需要得到文件的绝对路径。

使用 @p 选项返回带绝对路径的文件名,如下表达式:

=directory@sp(“d:/test”)

返回带绝对路径的文件名,部分结果如图:

..

1.5.      创建目录

使用 @m 选项,可以创建目录,如下表达式:

=directory@m(“d:/test/sub1/sub2”)

创建目录时,可以多级连续创建,比如上例中 sub1 也可以不存在,函数会将所有没创建的父目录一并创建出来。

1.6.      删除目录

使用 @r 选项,可以删除指定的目录:

=directory@r(“d:/test/sub1/sub2”)

上述代码会将 sub2 目录删除。

不过要注意的是,待删除的目录必须为空,才会被删除。如果非空,则上述代码返回值为 false,而不会删除指定的目录。

 

如果要强行删除非空的目录,则可以使用另一个函数:

=movefile@y(“d:/test/sub1/sub2”)

该函数使用 @y 选项强制删除指定的非空目录。

2    文件

使用 SPL 的 filename 函数可以将文件名的各部分分离出来。还可以使用 movefile 函数将文件移动,复制,或者删除等操作。

下面是一些文件名相关的操作示例。

2.1.      拆分文件名

使用 filename 函数可以将包含路径的文件名,分离出文件名:

=filename(“d:/test/MyApp/icon.png”)

执行上述代码后,便可获得文件名,结果如图:

..

拆分还有更多选项,比如:

使用 @e 选项,则只返回扩展名 png。

使用 @n 选项则返回不带扩展名的文件名 icon。

使用 @d 选项则只返回路径 d:/test/MyApp。

2.2.      移动和复制文件

使用 movefile 函数将文件移动到目的路径下。下例将文件 d:/test/MyApp/icon.png 移动到 d:/node 下面:

=movefile("d:/test/MyApp/icon.png","d:/node")

 

如果想将文件复制到目的路径下,则需要使用选项 @c,比如:

=movefile@c("d:/test/MyApp/icon.png","d:/node")

2.3.      删除文件

删除文件时仍然使用 movefile 函数,此时不填写目的路径,即:

=movefile("d:/test/MyApp/icon.png")

上述表达式会删除指定的文件。

 

注意,2.2 节中如果目标路径已存在同名文件,或者本节中待删除文件只读时,操作会失败。此时需要配合使用选项 @y 强制执行。

2.4.      重命名文件

重命名文件仍然使用 movefile 函数,此时目标不再是一个路径,而是要命名的新文件名。比如下面的示例:

=movefile("d:/test/MyApp/icon.png",”newname.png”)

上述代码将文件 d:/test/MyApp/icon.png 重新命名为 newname.png。

3    文件对象

使用 file 函数打开指定文件,并返回文件对象。

3.1.      打开文件

使用 file 函数打开指定的文件,如下表达式:

=file("d:/test/MyApp/config/ideconfig.json”)

返回这个 json 文件的文件对象。

 

注意:打开文件时默认使用操作系统的缺省字符集读取文件。如果要指定字符集,则需要用冒号隔开,比如用 UTF-8 字符集来打开上述文件:

=file("d:/test/MyApp/config/ideconfig.json”:”UTF-8”)

3.2.      创建临时文件

使用 file 函数的 @t 选项,便可以在指定的目录下创建一个名字随机的临时文件,比如:

=file@t("d:/tmp”)

执行后得到一个随机名字的临时文件,结果如图:

..

该临时文件所在的目录可以事先不存在,创建临时文件时,会自动创建好相应结构的目录。

 

注意:临时文件需要自己维护,文件使用完成后,需要主动删除。删除方法为使用 2.3 节的 movefile 函数。可以直接将文件对象传给 movefile,删除表达式如下:

=movefile(f)

其中的 f 则为打开的临时文件对象。

不过如果使用临时文件创建游标,且创建时使用了 @x 选项,即 f.cursor@x()语法,则该游标在取数完成后,会自动删除该文件。

3.3.      判断文件存在

通过 3.1 或者 3.2 节获得了文件对象 f 后,便可使用文件对象的 exists 函数返回文件的存在状态,表达式如下:

=f.exists()

其中 f 为文件对象,函数返回布尔值,表明文件是否存在。

3.4.      返回文件大小

使用文件对象的 size 函数便可得到当前文件的大小:

=f.size()

其中 f 为文件对象,函数返回整数值,表明文件占用的字节数。

3.5.      返回文件修改日期

使用文件对象的 date 函数便可得到当前文件的最后修改日期:

=f.date()

其中 f 为文件对象,函数返回日期时间值,表明文件的最后修改时间。

4    应用

4.1.      主目录

SPL 应用环境中可以设置一个主目录,将子目录或者文件放在主目录下时,在 SPL 中引用该文件则只需指定相对于主目录的相对路径即可。譬如将当前示例环境的主目录设置为 d:/test/MyApp 时,再使用 file 函数打开 d:/test/MyApp/icon.png,只需写文件名,表达式为:

=file(“icon.png”)

有了主目录,各主机可以根据各自环境将主目录设置在不同的磁盘或者目录下。SPL 脚本由于引用的是相对路径,所以可以很方便地移植到不同主机。

开发设计器中可以打开选项菜单,设置如下红框属性为应用主目录:

..

设置了主目录后,再来执行一遍 1.4 节中的如下代码:

=directory@sp(“d:/test”)

发现返回结果有了变化,部分结果截图如下:

..

可以看到从第 4 个元素开始,后面的文件因为都位于主目录下,所以即使使用了 @p 选项返回绝对路径,返回的仍然是相对于主目录的相对路径。

这样做的好处是,你只管使用 @p 选项获取绝对路径,然后在脚本中打开“绝对路径”的文件操作即可,而不用关心当前操作在不同环境,不同主目录下时是否要特殊处理,都能正确执行。

 

使用 filename 函数,可以拆分文件名。但如果文件名只是一个相对路径时,则可以指定 @p 选项,用于得到拼上主目录后的绝对路径,如下表达式:

=filename@p(“icon.png”)

返回拼上了主目录的绝对路径,结果如图:

..

当不指定路径,比如执行:

=filename@p()

则直接返回当前环境的主目录,本例结果为 d:/test/MyApp。

4.2.      寻址路径

当项目比较大时,往往会有比较多的文件。而这些项目文件,尤其是开发的 SPL 脚本文件,通常需要分类管理。如果将所有文件都放到主目录下,会造成主目录下文件过多,太过臃肿。

SPL 应用环境中,为此设置了寻址路径。寻址路径可以用分号分隔,从而可以设置多个值,以便更好地对项目脚本文件分门别类。

应用的寻址路径设置类似于主目录,如下图中红框属性:

..

引用主目录或者寻址路径下的文件时,都是使用相对路径。但在用法上还是有一些区别:

1, 主目录只可以设置一个,寻址路径可以为多个。

2, 使用 file 函数打开相对路径的文件时,缺省选项只相对于主目录。如果要相对于寻址路径,则需要指定 @s 选项。即使用 file@s 语法。

3, 使用 directory@p 函数返回绝对路径时,如果文件位于主目录下,则仍然返回相对于主目录的相对路径。

4.3.      临时目录

应用开发中会用到一些临时文件,为了集中管理临时文件,SPL 应用环境也设置了临时目录。临时目录跟寻址路径的设置类似,也是使用分号分隔,可以设置多个目录。如下图中的红框属性设置临时目录:

..

设置了临时目录后,3.2 节中使用 file@t函数创建临时文件时,就可以不需要指定在哪个目录下创建了。而是空出目录参数,此时系统会将临时文件自动创建在第一个临时目录下。如下的表达式:

=file@t()

执行后便可得到在应用环境指定的临时目录下,创建的临时文件,结果如图:

..

可以看到此时的临时文件位于红色框住的应用临时目录下面。

注意:应用环境的临时目录可以不设置。如果没有设置临时目录,执行上述不带目录的创建临时文件函数,则会报错。


以下是广告时间

对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅



嗯,还不太了解好多乾?
猛戳这里
玩转好多乾