【Godot4.4】写入和读取ZIP文件
概述
Godot提供了ZIPPacker
类型来读写ZIP压缩包文件。本文是简单的写入和读取文件操作测试笔记。
写入纯文本文件
extends Button
func _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 err
call_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 Button
func _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 err
call_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 Button
func _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 err
call_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 err
call_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 Button
func _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 err
call_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 err
call_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)