概述
Godot提供了ZIPPacker
类型来读写ZIP压缩包文件。本文是简单的写入和读取文件操作测试笔记。
写入纯文本文件
extends Buttonfunc _ready():write_zip_file("1.zip",func(zip_packer):write_txt_file_to_zippack(zip_packer,"1.txt","hhhhh")write_txt_file_to_zippack(zip_packer,"2.md","hhhhh")write_txt_file_to_zippack(zip_packer,"3.html","hhhhh"))func write_zip_file(zip_path:String,call_back:Callable):var zip_packer := ZIPPacker.new()var err := zip_packer.open(zip_path,ZIPPacker.APPEND_CREATE)if err != OK:return errcall_back.call(zip_packer)zip_packer.close_file()zip_packer.close()return OK# 在zip中写入纯文本文件
func write_txt_file_to_zippack(zip_packer:ZIPPacker,file_neme:String,file_content:String):zip_packer.start_file(file_neme)zip_packer.write_file(file_content.to_utf8_buffer())
写入任意二进制文件
extends Buttonfunc _ready():write_zip_file("1.zip",func(zip_packer):write_txt_file(zip_packer,"1.txt","hhhhh")write_txt_file(zip_packer,"2.md","hhhhh")write_txt_file(zip_packer,"3.html","hhhhh")write_binary_file(zip_packer,"1.jpg",get_binary_file_bytes("res://1.jpg")))# 返回文件的二进制字节数组形式
func get_binary_file_bytes(file_path:String):return FileAccess.get_file_as_bytes(file_path)func write_zip_file(zip_path:String,call_back:Callable):var zip_packer := ZIPPacker.new()var err := zip_packer.open(zip_path,ZIPPacker.APPEND_CREATE)if err != OK:return errcall_back.call(zip_packer)zip_packer.close_file()zip_packer.close()return OK# 在zip中写入纯文本文件
func write_txt_file(zip_packer:ZIPPacker,file_neme:String,file_content:String):zip_packer.start_file(file_neme)zip_packer.write_file(file_content.to_utf8_buffer())# 在zip中写入二进制文件
func write_binary_file(zip_packer:ZIPPacker,file_neme:String,file_content:PackedByteArray):zip_packer.start_file(file_neme)zip_packer.write_file(file_content)
读取ZIP
获取文件列表
extends Buttonfunc _ready():read_zip_file("1.zip",func(zip_reader:ZIPReader):var files = zip_reader.get_files()print(files) # ["1.txt", "2.md", "3.html", "1.jpg"])# 返回文件的二进制字节数组形式
func get_binary_file_bytes(file_path:String):return FileAccess.get_file_as_bytes(file_path)func write_zip_file(zip_path:String,call_back:Callable):var zip_packer := ZIPPacker.new()var err := zip_packer.open(zip_path,ZIPPacker.APPEND_CREATE)if err != OK:return errcall_back.call(zip_packer)zip_packer.close_file()zip_packer.close()return OK# 读取ZIP
func read_zip_file(zip_path:String,call_back:Callable):var zip_readder := ZIPReader.new()var err := zip_readder.open(zip_path)if err!= OK:return errcall_back.call(zip_readder)zip_readder.close()# 在zip中写入纯文本文件
func write_txt_file(zip_packer:ZIPPacker,file_neme:String,file_content:String):zip_packer.start_file(file_neme)zip_packer.write_file(file_content.to_utf8_buffer())# 在zip中写入二进制文件
func write_binary_file(zip_packer:ZIPPacker,file_neme:String,file_content:PackedByteArray):zip_packer.start_file(file_neme)zip_packer.write_file(file_content)
读取纯文本文件内容
extends Buttonfunc _ready():read_zip_file("1.zip",func(zip_reader:ZIPReader):var txt = get_zip_txt(zip_reader,"1.txt")print(txt))# 返回ZIP压缩包中指定名称的纯文本文件的文本内容
func get_zip_txt(zip_reader:ZIPReader,file_neme:String):var txt_bytes = zip_reader.read_file(file_neme)return txt_bytes.get_string_from_utf8()# 返回文件的二进制字节数组形式
func get_binary_file_bytes(file_path:String):return FileAccess.get_file_as_bytes(file_path)func write_zip_file(zip_path:String,call_back:Callable):var zip_packer := ZIPPacker.new()var err := zip_packer.open(zip_path,ZIPPacker.APPEND_CREATE)if err != OK:return errcall_back.call(zip_packer)zip_packer.close_file()zip_packer.close()return OK# 读取ZIP
func read_zip_file(zip_path:String,call_back:Callable):var zip_readder := ZIPReader.new()var err := zip_readder.open(zip_path)if err!= OK:return errcall_back.call(zip_readder)zip_readder.close()# 在zip中写入纯文本文件
func write_txt_file(zip_packer:ZIPPacker,file_neme:String,file_content:String):zip_packer.start_file(file_neme)zip_packer.write_file(file_content.to_utf8_buffer())# 在zip中写入二进制文件
func write_binary_file(zip_packer:ZIPPacker,file_neme:String,file_content:PackedByteArray):zip_packer.start_file(file_neme)zip_packer.write_file(file_content)