aardio:fsys文件操作

发布时间 2023-11-16 18:07:26作者: 周文豪

参考标准库/fsys文件操作/默认库

1、获取项目根目录的位置

getCurDir() = 获取当前目录。

当前目录易被改动,导致相对路径(例如 "./res/")位置变化。

路径首字符用单个斜杠或反斜杆表示「应用程序根目录」的写法更可靠,例如:(例如 "/res/")。

很多组件(例如文件对话框)都可能会悄悄改变当前目录

import fsys;
console.log(fsys.getCurDir() );

2、创建目录

createDir(.("目录路径",是否清空重建) = 创建目录并返回创建成功的完整文件路径,可创建多层目录,参数二可选

fsys.createDir("dir",true)

创建多层目录

fsys.createDir("dir\dirInner",true)

 

判断是否目录

isDir("__/*路径*/")  = 路径是否目录,调用attrib检查目标路径是否具有_FILE_ATTRIBUTE_DIRECTORY属性,参数为空字符串或 null 返回 false,包含不可见字符的错误路径可用「工具>文本文件>十六进制编辑器」,或 string.hex 函数查看

var dir1 = fsys.createDir("dir",true)
if(fsys.isDir("dir")){
    console.log("是目录")
} else {
    console.log("不是目录")    
}

3、删除文件或目录

delete( = 删除文件或目录,成功返回 true,删除含畸形路径的目录请改用 fsys.remove 函数。此函数失败返回 false 时可用 fsys.opError 获取错误代码

删除文件

fsys.delete("hello.txt")

删除目录

fsys.delete("dir")

 

4、移动文件或目录

move(.(源路径,目标路径,FOF选项,进度标题,父窗口句柄) = 移动文件或目录,

源路径参数可以是多个路径组成的数组,其他参数可选。如果目标路径已存在或源路径含通配符则移动到目标目录下面,否则复制文件或目录到参数@2指定的目标路径。如果目标路径的父目录可能不存在,请先用 io.createDir 创建该目录,FOF选项为 0 或 不指定该选项但 fsys.opFlags 为 0,则显示操作界面与错误信息

将hello.txt文件移动到dir目录下

fsys.move("hello.txt","/dir")

 

5、复制文件或目录

copy(.(源路径,目标路径,FOF选项,进度标题,父窗口句柄) = 复制文件或目录,

源路径参数可以是多个路径组成的数组,其他参数可选。如果目标路径已存在或源路径含通配符则复制到目标目录下面,否则复制文件或目录到参数@2指定的目标路径。如果目标路径的父目录可能不存在,请先用 io.createDir 创建该目录

FOF选项为 0 或 不指定该选项但 fsys.opFlags 为 0\n则显示操作界面与错误信息

将hello.txt文件复制到dir目录下

fsys.copy("hello.txt","/dir")

6、重命名文件或目录

rename(.(源路径,目标路径,FOF选项) = 重命名文件或目录,其他参数可选

FOF选项为 0 或 不指定该选项但 fsys.opFlags 为 0,则显示操作界面与错误信息

fsys.rename("hello.txt","hi.txt")

7、搜索当前目录下的文件

list(.("目录路径","模式匹配","通配符") = 搜索当前目录下的文件,不搜索子目录下的文件,返回符合条件的文件名数组,子目录数组,以及全部子目录数组。注意有三个返回值,数组中使用文件名为键存放对应完整路径的值。除参数@1以外其他参数可选,参数@2使用模式匹配语法匹配文件名,模式匹配会成为第三个返回值的匹配条件,通配符默认值是"*.*",也可以传入包含多个通配符的数组,通配符对第三个返回值无效

var res = fsys.list(fsys.getCurDir())
console.dumpTable(res)

注意:是文件,不是目录。

8、打开或创建文件对象

fsys.file("__/*文件路径*/","w+") = 读写模式打开,创建新文件清空原文件

示例

import fsys.file;
var fp = fsys.file("hello.txt","w+");
fp.close()

此时项目根目录下就会生成一个hello.txt文件

9、读取文件的内容

console.log(string.load("hello.txt"))

结果:hello world!

显示前5个字节的内容

import fsys.file;
file = fsys.file("hello.txt","r")
console.log( file.read(5) )

结果:hello

10、向文件中写入内容

string.save("hello.txt","2023-11-16")

11、解压 zip 文件

将hello.zip文件解压到my目录

import zlib.unzip;
var ok,err = zlib.unzip.extract( "hello.zip","/my",
    function(fileName,extractPath,fileInfo,size,unitSize,unitName){
        if( size !== null )
            ..console.log( "正在解压文件",fileName,size++ unitName );
        else {
            ..console.log( "正在解压目录",fileName );
        }
        
        return true;
    }
)

 

12、遍历目录

遍历该目录下的所有文件和目录,以及子目录下的文件和目录

//批量处理文件
fsys.enum( fsys.getCurDir(), //指定
    "*.*", //指定查询文件名,支持通配符,也可以用一个数组指定多个查询文件名
    function(dirname,filename,fullpath,findData){
        //可使用 return false 退出枚举过程
        
        if(filename){ 
            console.log("发现文件:",filename )
            console.log("完整路径",fullpath )
            
            /*
            可以用 fsys.replace 函数替换文件内容,
            fsys.replace(fullpath,"查找的内容\d+","替换的内容",替换次数)
            
            fsys.replace 支持二进制文件或 UTF-8 文本文件,
            其他编码用 fsys.codepage 加载文件后用 string.replace() 函数替换。
            或者用 fsys.batch 实现批量处理并且支持自动处理编码转换。
            */
        }
        else{
            console.log("发现目录:",dirname)
        }
    } ,/*如果此参数为false则忽略子目录*/
);