跳到主要内容
版本:release

Archive

archive是一种归档类型,用于将一个文件或文件夹归档为一个archive文件。

一个archive类型的对象对应一个archive文件。

archive文件有zip和pak两种格式,在创建archive对象时根据文件名后缀确定。

举个例子:

archive_test.gs
archive arch2 = archive.find("./archive3.pak",true,"wr");

arch2.pack_tree_files({"etc":{"test.xls":"/etc/test.xls"}});

buffer buf = arch2.read_file("/etc/test.xls");

array dir = arch2.get_dir("/");

// [ /* sizeof() == 1 */
// "etc",
// ]

arch2.pack_tree_files({"etc_bak":{"test.xls":"/etc_bak/test.xls","test_big.xls":"/etc_bak/test_big.xls"}});

arch2.dump();
/*
|+ /
|+ /etc_bak/
|- test.xls
|- test_big.xls
*/

array dir = arch2.get_dir("/etc_bak/");

// [ /* sizeof() == 2 */
// "test.xls",
// "test_big.xls",
// ]

dir = arch2.get_dir("/etc_bak/",true);

// [ /* sizeof() == 2 */
// { /* sizeof() == 3 */
// "name" : "test.xls",
// "mtime" : 1623227475,
// "is_dir" : false,
// },
// { /* sizeof() == 3 */
// "name" : "test_big.xls",
// "mtime" : 1623227475,
// "is_dir" : false,
// },
// ]

archive常用的外部函数

下面列出archive类型一些常用的外部函数以及用法。

1. 指定路径文件名寻找archive文件并返回archive对象, auto_create决定当未找到时是否自动创建

函数原型:
archive archive.find(string path, bool auto_create = false, string mode = "")
使用方法:
archive arch = archive.find("./archive.zip");

2. 根据路径文件名打开一个archive文件并返回archive对象,不允许重复打开,若文件不存在则创建

函数原型:
archive archive.open(string path, string mode)
使用方法:
archive arch = archive.open("./archive.zip", "wb");

3. 获取archive中指定目录下的文件或文件夹列表

函数原型:
array archive_instance.get_dir(string path, bool detail = false)
使用方法:
array a = arch.get_dir("/");

4. 获取archive中的文件,以buffer返回文件中的数据,path路径是archive中的相对路径

函数原型:
buffer archive_instance.read_file(string path)
使用方法:
buffer test = arch.read_file("/etc_bak/test.xls")

5. 暂不支持

函数原型:
bool archive_instance.write_file(string path, buffer buf)
使用方法:

6. 将用map组织的文件结构打包进archive中

函数原型:
void archive_instance.pack_tree_files( map tree_files)
使用方法:
arch.pack_tree_files({"etc_bak":{"test.xls":"/etc_bak/test.xls","test_big.xls":"/etc_bak/test_big.xls"}});

7. dump整个archive的组织结构

函数原型:
void archive_instance.dump()
使用方法:
arch.dump();

8. 将所有变化保存到archive文件中

函数原型:
void archive_instance.flush()
使用方法:
arch.flush();