SharpZlibを使って圧縮/解凍 tar編

以前にSharpZlibを使ったZIPファイルの圧縮・解凍をテストしましたけど。
今度はtarアーカイブ(.tar.gz)を圧縮・解凍したいという話があったので、同じくSharpZlibを使っての実験です(・∀・)


SharpZipLibの中にはそのものズバリTarArchiveクラスがあるので、このクラスを使うだけで単純に処理できます。
こんなカンジです。

using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Tar;

public static void Tar(string tarfile, string[] files)
{
    Stream st = new GZipOutputStream( File.Create( tarfile ) );
    TarArchive archive = TarArchive.CreateOutputTarArchive( st, TarBuffer.DefaultBlockFactor );

    archive.SetKeepOldFiles( false );
    archive.SetAsciiTranslation( false);
    archive.SetUserInfo( 0, "", 0, "None" );

    foreach( string file in files )
    {
        TarEntry entry = TarEntry.CreateEntryFromFile( file );
        archive.WriteEntry( entry, true );
    }

    archive.CloseArchive();
}
public static void Untar(string tarfile, string extractPath)
{
    Stream st = new GZipInputStream( File.OpenRead( tarfile ) );
    TarArchive archive = TarArchive.CreateInputTarArchive( st, TarBuffer.DefaultBlockFactor );

    archive.SetKeepOldFiles( false );
    archive.SetAsciiTranslation( false);
    archive.SetUserInfo( 0, "", 0, "None" );

    Directory.CreateDirectory( extractPath );

    archive.ExtractContents( extractPath );

    archive.CloseArchive();
}

SharpZlibのサンプルの中にTarコマンドのソースがあるので、そこから処理を抜き出しただけですけどね(・∀・)


GZipを想定してGZipInputStream/GZipOutputStreamを使用していますが、BZip2を使いたいときにはICSharpCode.SharpZipLib.BZip2名前空間のBZip2InputStream/BZip2OutputStreamに変えるだけでOKです。
Unix環境とやりとりする時なんかに使いますってことで(´ω`)