当前位置: 首页 > news >正文

【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)

相关文章:

  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(34)混元金斗装万物 - 0-1背包问题(二维DP)
  • React.js 基础与进阶教程
  • 【网络安全 | 漏洞挖掘】四链路账户接管
  • 视频理解之Actionclip(论文宏观解读)
  • SQL日期处理
  • Java的JDBC编程
  • BFS最短路径(十七)675. 为高尔夫比赛砍树 困难
  • 图像识别技术与应用(十六)
  • 科技工作者之家建设扬帆起航,为科技人才提供更多优质服务
  • lua C语言api学习1 编译第一个程序
  • 【巨人网络】25届春招、26届实习内推码,面经
  • nginx反向代理应用
  • SMC自修改
  • 二进制安装指定版本的MariaDBv10.11.6
  • 珠算之珠心算观想算盘
  • 基于Python+Vue开发的鲜花商城管理系统源码+运行步骤
  • 深度学习基础:线性代数本质4——矩阵乘法
  • 机器学习之超参数优化(Hyperparameter Optimization)
  • 【leetcode hot 100 23】合并K个有序链表
  • 图像识别技术与应用-YOLO
  • 中国首艘海洋级智能科考船“同济”号试航成功,可搭载水下遥控机器人
  • 习近平在第三十五个全国助残日到来之际作出重要指示
  • 向猫学习禅修之后,你会发现将生活降格为劳作是多么愚蠢
  • 香港特区立法会通过条例草案便利外地公司迁册来港
  • 内塔尼亚胡:以军将在未来几天“全力进入”加沙
  • 受美关税影响,本田预计新财年净利下降七成,并推迟加拿大建厂计划