【Godot4.4】写入和读取ZIP文件

news/2025/5/16 9:14:39/

概述

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)

http://www.ppmy.cn/news/1578805.html

相关文章

clickhouse源码分析

《ClickHouse源码分析》 当我们谈论数据库时,ClickHouse是一个不容忽视的名字。它是一个用于联机分析处理(OLAP)的列式数据库管理系统(DBMS),以其快速的数据查询能力而闻名。对于想要深入了解这个高效工具…

Hyper-YOLO: When Visual Object Detection Meets Hypergraph Computation

简介: 时间:2025 期刊:TPAMI 作者:Yifan Feng, Jiangang Huang, Shaoyi Du, Shihui Ying, Jun-Hai Yong 摘要: ①Hyper-YOLO引入一种新的目标检测方法,结合超图计算捕捉视觉特征中的复杂高阶相关性 ②…

AI浪潮下嵌入式软件开发如何拥抱AI:VSCODE + MarscodeAI插件+Embedded IDE

一、引言 AI浪潮席卷各个领域,各领域都在探索与AI技术深度融合以创新并提升效率。嵌入式软件开发领域同样面临此机遇与挑战。VSCODE作为流行的开源代码编辑器,与MarscodeAI插件、eide相结合,为嵌入式软件开发的AI融合提供了新思路与方法。 二…

Diffusion-Probabilistic-Models环境配置

1、相关地址 代码地址:https://github.com/Sohl-Dickstein/Diffusion-Probabilistic-Models 论文地址:https://arxiv.org/abs/2006.11239 2、python2.7 环境安装 conda create -n theano python2.7 -y conda activate theano3、包安装 下载合适的版本,也就是201…

简要分析NETLINK_USER参数

NETLINK_USER是Linux Netlink协议族的一个预留类型,允许开发者自定义用户空间与内核空间(或用户空间进程间)的通信协议。它提供了一种高度灵活的IPC机制,适合于需要高效、结构化、双向通信的场景,尤其是当现有Netlink …

Docker基础入门(一)

初识Docker 什么是Docker Docker是一个快速交付应用、运行应用的技术: 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统运行时利用沙箱机制形成隔离容器,各个应用互不干扰启动、移除都可以通过一行命令完成&…

VSCode 配置优化

Visual Studio Code(VSCode)是一款功能强大且高度可定制的代码编辑器。通过合理的配置和优化,可以显著提升开发效率。以下是一份详细的 VSCode 配置优化指南,涵盖常用设置、扩展推荐、快捷键优化等内容。 1. 基本设置优化 通过修…

基于django+vue的购物商城系统

开发语言:Python框架:djangoPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统首页 热卖商品 优惠资讯 个人中心 后台登录 管理员功能界面 用户管理 商品分类管理…