ZIPReader

继承: RefCounted < Object

允许读取 ZIP 文件的内容。

描述

该课程实现了可以在zip存档中提取单个文件的内容的读者。 参见 ZIPPacker.

# 从zip存档中读取一个文件。
func read_zip_file():
    var reader = ZIPReader.new()
    var err = reader.open("user://archive.zip")
    if err != OK:
        return PackedByteArray()
    var res = reader.read_file("hello.txt")
    reader.close()
    return res

# 从zip存档中提取所有文件,并保留其中的目录。
# 这就像大多数档案管理人员的“提取所有”功能一样。
func extract_all_from_zip():
    var reader = ZIPReader.new()
    reader.open("res://archive.zip")

    # 提取的文件的目标目录(提取之前必须存在此文件夹)。
    # 并非所有的zip档案都将所有内容都放在一个根文件夹中,
    # 这意味着提取后可以在“ root_dir”中创建几个文件/文件夹。
    var root_dir = DirAccess.open("user://")

    var files = reader.get_files()
    for file_path in files:
        # 如果当前条目是目录。
        if file_path.ends_with("/"):
            root_dir.make_dir_recursive(file_path)
            continue

        # 写文件内容,在需要时自动创建文件夹。
        # 文件输入到文件夹条目之前。
        root_dir.make_dir_recursive(root_dir.get_current_dir().path_join(file_path).get_base_dir())
        var file = FileAccess.open(root_dir.get_current_dir().path_join(file_path), FileAccess.WRITE)
        var buffer = reader.read_file(file_path)
        file.store_buffer(buffer)

方法

Error

close()

bool

file_exists(path: String, case_sensitive: bool = true)

PackedStringArray

get_files()

Error

open(path: String)

PackedByteArray

read_file(path: String, case_sensitive: bool = true)


方法说明

Error close() 🔗

关闭该实例底层所使用的资源。


bool file_exists(path: String, case_sensitive: bool = true) 🔗

返回 true 如果文件存在于已加载的zip存档中。

必须在 open().


PackedStringArray get_files() 🔗

返回已加载存档中所有文件的名称列表。

必须在 open().


Error open(path: String) 🔗

打开给定 path 的压缩文件,并读取其文件索引。


PackedByteArray read_file(path: String, case_sensitive: bool = true) 🔗

将文件的整体内容加载到已加载的zip存档中的内存中并返回。

必须在 open().