【Unity C#】スクリプトからGZip (.tgz) 形式の圧縮ファイルを作成する方法 (SharpZipLibを使う場合)

C#

この記事を手にとっていただき、ありがとうございます。

なんちゃってエンジニア 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[] targetPathsTar アーカイブ化・圧縮したいファイルやディレクトリのパス
(複数可)
bool isRecursive指定したディレクトリ配下のサブディレクトリも再帰的に処理するか
(サブディレクトリも Tar アーカイブ化・圧縮するか)
int compressionLevel圧縮レベル
(初期値:1、大きくするほど圧縮率が高くなるがデータ破損しやすくなる)

補足

特になし

参照情報・参考文献

GitHub - icsharpcode/SharpZipLib: #ziplib is a Zip, GZip, Tar and BZip2 library written entirely in C# for the .NET platform.
#ziplib is a Zip, GZip, Tar and BZip2 library written entirely in C# for the .NET platform. - icsharpcode/SharpZipLib
#ziplib(SharpZipLib)を使ってZIP圧縮、展開(解凍)、リスト表示などを行う
C# で ZIP ファイルを作成する

コメント

タイトルとURLをコピーしました