awtk/docs/fscript_fs.md
2022-08-23 10:34:55 +08:00

494 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 文件系统扩展函数
### 1.file\_read\_text
> 读取文本文件。
----------------------------
#### 原型
```js
file_read_text(filename) => str
```
#### 示例
```js
file_read_text("test.txt");
```
### 2.file\_read\_binary
> 读取二进制文件。
----------------------------
#### 原型
```js
file_read_binary(filename) => binary
```
#### 示例
```js
var a = file_read_binary("test.bin");
```
### 3.file\_write
> 写入文件。
----------------------------
#### 原型
```js
file_write(filename, str) => bool
file_write(filename, binary) => bool
file_write(filename, data, size) => bool
```
#### 示例
```js
file_write("test.txt", "write str");
```
### 4.file\_write\_append
> 写入文件尾部(追加内容)。
----------------------------
#### 原型
```js
file_write_append(filename, str) => bool
file_write_append(filename, binary) => bool
file_write_append(filename, data, size) => bool
```
#### 示例
```js
file_write_append("test.txt", "append str");
```
### 5.file\_exist
> 检查文件是否存在。
----------------------------
#### 原型
```js
file_exist(filename) => bool
```
#### 示例
```js
print(file_exist("test.txt"));
```
### 6.file\_get\_size
> 获取文件大小。
----------------------------
#### 原型
```js
file_get_size(filename) => int32_t
```
#### 示例
```js
print(file_get_size("test.txt"));
```
### 7.file\_remove
> 删除指定的文件。
----------------------------
#### 原型
```js
file_remove(filename) => bool
```
#### 示例
```js
file_remove("test.txt");
```
### 8.file\_rename
> 文件重命名。
----------------------------
#### 原型
```js
file_rename(filename, new_name) => bool
```
#### 示例
```js
file_rename("test.txt","rename.txt");
```
### 9.file\_copy
> 文件拷贝。
----------------------------
#### 原型
```js
file_copy(filename, dst_name) => bool
```
#### 示例
```js
file_copy("rename.txt","copy.txt");
```
### 10.file\_stat
> 获取文件信息。
----------------------------
#### 原型
```js
file_stat(filename) => object
```
返回的文件信息对象包含以下属性:
| 属性名称 | 属性类型 | 说明 |
| ----------- | -------- | ---------------------- |
| dev | uint32_t | 文件系统设备 |
| ino | uint16_t | 文件序列号 |
| mode | uint16_t | 文件类型和权限信息 |
| nlink | int16_t | 文件的符号链接数量 |
| uid | int16_t | 用户id |
| gid | int16_t | 组id |
| rdev | uint32_t | 设备id |
| size | uint64_t | 文件大小(单位:字节) |
| atime | uint64_t | 最后访问时间 |
| mtime | uint64_t | 最后修改时间 |
| ctime | uint64_t | 创建时间 |
| is_dir | bool_t | 是否为目录 |
| is_link | bool_t | 是否为链接 |
| is_reg_file | bool_t | 是否为普通文件 |
#### 示例
```js
var a = file_stat("rename.txt");
print(join(": ","dev",a.dev));
print(join(": ","ino",a.ino));
print(join(": ","mode",a.mode));
print(join(": ","nlink",a.nlink));
print(join(": ","uid",a.uid));
print(join(": ","rdev",a.rdev));
print(join(": ","size",a.size));
print(join(": ","atime",a.atime));
print(join(": ","mtime",a.mtime));
print(join(": ","ctime",a.ctime));
print(join(": ","is_dir",a.is_dir));
print(join(": ","is_link",a.is_link));
print(join(": ","is_reg_file",a.is_reg_file));
```
### 11.path\_create
> 创建目录(递归创建不存在的父目录)。
----------------------------
#### 原型
```js
path_create(path) => bool
```
#### 示例
```js
path_create("a/b/c");
```
### 12.path\_remove
> 删除目录(递归创建子目录和文件)。
----------------------------
#### 原型
```js
path_remove(path) => bool
```
#### 示例
```js
path_remove("a/b/c");
```
### 13.path\_exist
> 检查指定的目录是否存在。
----------------------------
#### 原型
```js
path_exist(path) => bool
```
#### 示例
```js
print(path_exist("a/b/c"));
```
### 14.path\_rename
> 目录重命名。
----------------------------
#### 原型
```js
path_rename(path, new_path) => bool
```
#### 示例
```js
path_rename("a/b","a/bbb");
```
### 15.path\_list
> 获取指定目录下的子目录/文件列表。
----------------------------
#### 原型
```js
path_list(path) => array
```
返回的列表数组中每个元素都是一个 object 对象,每个 object 对象中包含以下属性:
| 属性名称 | 属性类型 | 说明 |
| ----------- | -------- | -------------- |
| is_dir | bool_t | 是否是目录 |
| is_link | bool_t | 是否是符号链接 |
| is_reg_file | bool_t | 是否是普通文件 |
| name | str | 文件名称 |
#### 示例
```js
var a = path_list("a/b");
var b = array_get(a,0);
print(object_get(b.is_dir));
print(object_get(b.is_link));
print(object_get(b.is_reg_file));
print(object_get(b.name));
```
### 16.path\_get\_exe
> 获取可执行文件所在目录。
----------------------------
#### 原型
```js
path_get_exe() => str
```
#### 示例
```js
print(path_get_exe());
```
### 17.path\_get\_cwd
> 获取当前所在目录。
----------------------------
#### 原型
```js
path_get_cwd() => str
```
#### 示例
```js
print(path_get_cwd());
```
### 18.path\_get\_temp
> 获取临时目录的路径。
----------------------------
#### 原型
```js
path_get_temp() => str
```
#### 示例
```js
print(path_get_temp());
```
### 19.path\_get\_app\_root
> 获取应用程序根目录的路径。
----------------------------
#### 原型
```js
path_get_app_root() => str
```
#### 示例
```js
print(path_get_app_root());
```
### 20.path\_get\_user\_storage\_root
> 获取用户目录或用户可以存储数据的目录的路径。
----------------------------
#### 原型
```js
path_get_user_storage_root() => str
```
#### 示例
```js
print(path_get_user_storage_root());
```
### 21.fs\_get\_disk\_info
> 获取文件系统信息。
----------------------------
#### 原型
```js
fs_get_disk_info(path) => object
```
返回的文件系统信息对象包含以下属性:
| 属性名称 | 属性类型 | 说明 |
| -------- | -------- | ---------------- |
| free_kb | int32_t | 空闲空间大小(KB) |
| total_kb | int32_t | 总共空间大小(KB) |
> 备注:该功能需适配 AWTK 通用文件系统fs.h中的 fs_get_disk_info 接口,目前 PC 上暂不支持。
```js
var a = fs_get_disk_info("/sd");
print(join(": ","free_kb",a.free_kb));
print(join(": ","total_kb",a.total_kb));
```
### 更多示例
```js
assert(file_write("test.txt", "hello"))
assert(file_exist("test.txt"))
assert(file_get_size("test.txt")==5)
assert(file_read_text("test.txt") == "hello")
assert(file_write_append("test.txt","world"))
assert(file_read_text("test.txt") == "helloworld")
assert(file_rename("test.txt","rename.txt"))
assert(!file_exist("test.txt"))
assert(file_read_text("rename.txt") == "helloworld")
assert(file_copy("rename.txt","copy.txt"))
assert(file_read_text("copy.txt") == "helloworld")
assert(file_remove("copy.txt"))
assert(!file_exist("copy.txt"))
var a = file_stat("rename.txt")
print(join(": ","dev",a.dev))
print(join(": ","ino",a.ino))
print(join(": ","mode",a.mode))
print(join(": ","nlink",a.nlink))
print(join(": ","uid",a.uid))
print(join(": ","rdev",a.rdev))
print(join(": ","size",a.size))
print(join(": ","atime",a.atime))
print(join(": ","mtime",a.mtime))
print(join(": ","ctime",a.ctime))
print(join(": ","is_dir",a.is_dir))
print(join(": ","is_link",a.is_link))
print(join(": ","is_reg_file",a.is_reg_file))
assert(file_remove("rename.txt"))
assert(!file_exist("rename.txt"))
assert(file_write("test.bin", "hello", 5))
assert(file_exist("test.bin"))
assert(file_get_size("test.bin")==5)
a = file_read_binary("test.bin")
assert(value_get_binary_size(a) == 5)
assert(file_remove("test.bin"))
assert(!file_exist("test.bin"))
assert(file_write("test.bin", a))
assert(file_exist("test.bin"))
assert(file_get_size("test.bin")==5)
assert(file_remove("test.bin"))
assert(path_create("a/b/c"))
assert(path_exist("a/b/c"))
assert(path_remove("a/b/c"))
assert(!path_exist("a/b/c"))
assert(path_rename("a/b","a/bbb"))
assert(!path_exist("a/b"))
assert(path_exist("a/bbb"))
assert(file_write("a/test.txt", "hello"))
a = path_list("a")
assert(a.size==2)
var b = array_get(a,0)
var c = array_get(a,1)
assert(b.name=="bbb")
assert(c.name=="test.txt")
assert(path_remove("a"))
assert(!path_exist("a"))
print(path_get_exe())
print(path_get_cwd())
print(path_get_temp())
print(path_get_app_root())
print(path_get_user_storage_root())
unset(a)
unset(b)
unset(c)
```