この記事を手にとっていただき、ありがとうございます。
なんちゃってエンジニア Mojatto と申します。
概要
このエントリでは、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
を使用します。
ISharpCode/SharpZipLib 公式 Github リポジトリ
https://github.com/icsharpcode/SharpZipLib
公式の Github リポジトリから最新版のソースコードを取得すると、中にライブラリをビルドするための Visual Studio ソリューションファイルが入っているので、これを用いてソリューションのビルドを行うと、Unityスクリプトからライブラリを使用するための DLL ファイル (.dll) が出力されます。
※公式サイトにて DLL ファイルが配布されていたようですが、現在はリンクが見当たらないので、自力で DLL ファイルをビルドするか、NuGet パッケージとしてプロジェクトに追加しなければならないようです。
出力された DLL ファイルを、Unity プロジェクトの Assets/Plugins
などに配置することで、Unity スクリプトから名前空間を利用できるようになります。
※この手順については、別エントリにて改めて説明を残す予定です。
ソース本体
使い方
Unityスクリプトから ArchiveLibrary.CompressDirectoriesToTgz()
を呼び出し、以下のように引数を与えることで、指定したファイルパス (あるいは配下ディレクトリにあるすべてのファイル) を GZip 形式 (.tgz) に圧縮し、指定したパスに出力することができます。
string destPath | 出力される GZip (.tgz) 圧縮ファイルを保存する先のファイルパス |
string[] targetPaths | Tar アーカイブ化・圧縮したいファイルやディレクトリのパス (複数可) |
bool isRecursive | 指定したディレクトリ配下のサブディレクトリも再帰的に処理するか (サブディレクトリも Tar アーカイブ化・圧縮するか) |
int compressionLevel | 圧縮レベル (初期値:1、大きくするほど圧縮率が高くなるがデータ破損しやすくなる) |
補足
特になし
コメント