ぽぴ王子の人生プログラミング中

~デバッグもあるでよ!~

目次

ニュース

日記カテゴリ

書庫

Blog 利用状況

リンク

2009年7月3日 #

tar形式について (1)

元ネタ: vb.net2005でtar圧縮 (C# と VB.NET の質問掲示板)

WinXp、VB.NET2005環境にて
tarを使用してフォルダを圧縮したいと考えています。

tarってファイルをまとめるだけで圧縮しないんだけど、いいのかなーとか思ったり思わなかったりラジバンダリ。質問者さんに参考にならないかも?なんて思いますが、一応書いてみます。

tarファイルのフォーマットは実はすごく簡単なので、自分で作っちゃうことも可能です。というか、わんくま同盟 東京勉強会 #23 C# Dayわんくま同盟 大阪勉強会 #22で話した内容はまさにそんな感じの話です。大阪勉強会であまりの準備不足加減に「続きはWebで!」とか言ってしまったまま放置状態だったので、ウホッ!いい機会だから書いてみようかって感じで。

まず、tarファイルのフォーマットについて調べました。Google先生にお伺いを立てたところ、いくつか見つかりました。

  1. tar32.dllの作者の吉岡さんが書かれたフォーマット説明
  2. HP(ホームページヒューレット・パッカード)のサイトにあった、tarのヘッダ構造体の解説

HPのサイトの方が正確なのだと思いますが、ヘッダ以外にも知りたいこともあるので、吉岡さんの書かれたドキュメントを参考にしてみましょう。

ファイルを作るときは、tarヘッダ512バイト+データ(512バイト単位)の繰り返しになり、最後に1024バイトの終端データ(すべて00で埋められている)が付加されます。512バイトに満たないファイルは512バイトになるように、残りが00で埋められます。

例えば700バイトのファイルを連結[*1]する場合

のような形式になります。この場合、tarファイルの長さは512+512+188+324+1024=2560バイトとなります。

ファイルデータ1と2は便宜上こう表記していますが、実際は一つのデータです。2ファイル以上のファイルを連結する場合はパディングデータの後ろにtarヘッダとファイルデータが続き、最後に終端データが入ります。

今回はここまで。次回はtarヘッダの解説をしようと思います。

[*1]
tarは圧縮するわけではないので、この場合『圧縮』ではなく『連結』と呼びます

posted @ 18:19 | Feedback (45)