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環境とやりとりする時なんかに使いますってことで(´ω`)