🗃️

スクリプトからGZip (.tgz) 形式の圧縮ファイルを作成する

に公開

概要

このエントリは、Unityソフトウェア環境において、スクリプトから GZip (.tgz) 形式の圧縮ファイルを作成する方法について、記述するものです。

このエントリによって可能となること

Unityソフトウェア環境において、以下のような操作をC#スクリプトから行うことが可能となります。

  • 対象のファイル単体または配下ディレクトリを含むすべてのファイルを Tar アーカイブ化する
  • Tar アーカイブ化したすべてのファイルを GZip (.tgz) 形式の圧縮ファイルとして保存する

検証環境

項目 内容
使用PC 個人所有の Windows 11 PC
Unityソフトウェアバージョン Unity 2021.3.16f1 LTS
IDE (使用エディター) Microsoft Visual Studio Code 1.78.2

手法説明

事前準備

本記事の手法では、MITライセンスで公開されている書庫データを扱うためのライブラリである、
SharpZipLib
を使用します。

https://github.com/icsharpcode/SharpZipLib

公式の Github リポジトリから最新版のソースコードを取得すると、中にライブラリをビルドするための Visual Studio ソリューションファイルが入っているので、これを用いてソリューションのビルドを行うと、Unityスクリプトからライブラリを使用するための DLL ファイル (.dll) が出力されます。

※公式サイトにて DLL ファイルが配布されていたようですが、現在はリンクが見当たらないので、自力で DLL ファイルをビルドするか、NuGet パッケージとしてプロジェクトに追加しなければならないようです。

出力された DLL ファイルを、Unity プロジェクトの Assets/Plugins などに配置することで、Unity スクリプトから名前空間を利用できるようになります。

※この手順については、別エントリにて改めて説明を残す予定です。

サンプルコード

使い方

Unityスクリプトから ArchiveLibrary.CompressDirectoriesToTgz() を呼び出し、以下のように引数を与えることで、指定したファイルパス (あるいは配下ディレクトリにあるすべてのファイル) を GZip 形式 (.tgz) に圧縮し、指定したパスに出力することができます。

引数名 説明
destPath string 出力される GZip (.tgz) 圧縮ファイルを保存する先のファイルパス
targetPaths string[] Tar アーカイブ化・圧縮したいファイルやディレクトリのパス (複数可)
isRecursive bool 指定したディレクトリ配下のサブディレクトリも再帰的に処理するか (サブディレクトリも Tar アーカイブ化・圧縮するか)
compressionLevel int 圧縮レベル (初期値:1、大きくするほど圧縮率が高くなるがデータ破損しやすくなる)

補足

特になし

参照情報・参考文献

https://github.com/icsharpcode/SharpZipLib

https://dobon.net/vb/dotnet/links/sharpziplib.html

http://www.kanazawa-net.ne.jp/~pmansato/net/net_tech_zip.htm

Discussion