123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- <?xml version="1.0" encoding="UTF-8" ?>
- <class name="ZIPReader" inherits="RefCounted" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../doc/class.xsd">
- <brief_description>
- Allows reading the content of a ZIP file.
- </brief_description>
- <description>
- This class implements a reader that can extract the content of individual files inside a ZIP archive. See also [ZIPPacker].
- [codeblock]
- # Read a single file from a ZIP archive.
- 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
- # Extract all files from a ZIP archive, preserving the directories within.
- # This acts like the "Extract all" functionality from most archive managers.
- func extract_all_from_zip():
- var reader = ZIPReader.new()
- reader.open("res://archive.zip")
- # Destination directory for the extracted files (this folder must exist before extraction).
- # Not all ZIP archives put everything in a single root folder,
- # which means several files/folders may be created in `root_dir` after extraction.
- var root_dir = DirAccess.open("user://")
- var files = reader.get_files()
- for file_path in files:
- # If the current entry is a directory.
- if file_path.ends_with("/"):
- root_dir.make_dir_recursive(file_path)
- continue
- # Write file contents, creating folders automatically when needed.
- # Not all ZIP archives are strictly ordered, so we need to do this in case
- # the file entry comes before the folder entry.
- 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)
- [/codeblock]
- </description>
- <tutorials>
- </tutorials>
- <methods>
- <method name="close">
- <return type="int" enum="Error" />
- <description>
- Closes the underlying resources used by this instance.
- </description>
- </method>
- <method name="file_exists">
- <return type="bool" />
- <param index="0" name="path" type="String" />
- <param index="1" name="case_sensitive" type="bool" default="true" />
- <description>
- Returns [code]true[/code] if the file exists in the loaded zip archive.
- Must be called after [method open].
- </description>
- </method>
- <method name="get_compression_level">
- <return type="int" />
- <param index="0" name="path" type="String" />
- <param index="1" name="case_sensitive" type="bool" default="true" />
- <description>
- Returns the compression level of the file in the loaded zip archive. Returns [code]-1[/code] if the file doesn't exist or any other error occurs. Must be called after [method open].
- </description>
- </method>
- <method name="get_files">
- <return type="PackedStringArray" />
- <description>
- Returns the list of names of all files in the loaded archive.
- Must be called after [method open].
- </description>
- </method>
- <method name="open">
- <return type="int" enum="Error" />
- <param index="0" name="path" type="String" />
- <description>
- Opens the zip archive at the given [param path] and reads its file index.
- </description>
- </method>
- <method name="read_file">
- <return type="PackedByteArray" />
- <param index="0" name="path" type="String" />
- <param index="1" name="case_sensitive" type="bool" default="true" />
- <description>
- Loads the whole content of a file in the loaded zip archive into memory and returns it.
- Must be called after [method open].
- </description>
- </method>
- </methods>
- </class>
|