LoginSignup
0
0

TARアーカイブ作成ライブラリ

Last updated at Posted at 2023-01-15

世界一シンプルな C# / .NET 向け TAR アーカイブ作成ライブラリです。なんとアーカイブの作成しかできません。その代わりに unsafe が不要(C# 7.3 以降)、追加の DLL の導入も不要、バニラ C# で動きます。

有名どころのライブラリは Zip・GZip・RAR など複数のフォーマットに対応しているのは良いものの、Zip は既に不要だったり、多機能すぎてあらゆる操作が大仰になっていたりだったので、tar 作成部分だけを既存ライブラリから抜き出しました。

System.IO.Compression がいまだに対応していない tar フォーマット、後方互換性のために tar アーカイブの書き出しだけは出来るように、という需要もまだまだあるでしょう。

使い方

TarStream を開いて string、byte[] または Stream を書き込むだけで tar アーカイブが作れます。System.IO.Compression と組み合わせて .tar.gz.tgz)も作成できます。

using SatorImaging.TarArchiver;
using System;
using System.IO;
using System.IO.Compression;

public class Sample
{
    static void Main(string[] args)
    {
        if (args.Length == 0 || string.IsNullOrWhiteSpace(args[0]))
            throw new ArgumentNullException(nameof(args));

        // open TAR stream and export as a .tar.gz format
        using (var targz = new FileStream(args[0], FileMode.Create, FileAccess.Write))
        using (var gzip = new GZipStream(targz, CompressionLevel.Optimal))
        using (var tar = new TarStream(gzip))
        {
            // writing data
            tar.Write(@"path/to/the/file.txt", @"Hello, World.");
            tar.Write(@"path/with/multibyte/文字列.txt", @"ひらがなカタカナ漢字");
            tar.Write(@"yet-another-folder/byteArray.txt", new byte[] { 84, 65, 82, 13, 10 });  //TAR[CR][LF]
            tar.Write(@"root.txt", "");
            tar.Flush();  // done in TarStream.Dispose() anyway
        }

    }
}

Unity

Unity 2021.3 でテスト。Unity Package Manager (UPM) を使う場合は以下のURLを。

  • Lastest: https://github.com/sator-imaging/CSharp-TarArchiver.git
  • v1.0.0: https://github.com/sator-imaging/CSharp-TarArchiver.git#v1.0.0

src/Sample.cs がある状態だと Unity エディターにメニューが追加され、テストファイルを書き出すためのダイアログが使用できます。

TARアーカイブ

ロングネーム対応でちょっとヘッダーが面倒だけど、それ以外は単純。

ヘッダー+ファイルを書き込んで512kのブロックに足りない部分をゼロで埋める、をファイルの数だけ繰り返して最後に2ブロック(1024k)を 0 で埋めれば終わり。

1MiB を丸ごとゼロで埋める終端表現はかなりダイナミック。

tar - Format of tar archives - IBM Documentation

--

ヘッダーが固定長だったらスゲー楽に読み込み機能付けられるんだけも。

以上です。お疲れ様でした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0