none
.tgzファイルを解凍する際 RRS feed

  • 質問

  • お世話になります。

    これまで.tgzファイルを解凍する際は

    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();
    }
    

    で可能でした。

    ただ今回の.tgzファイルの中には、ファイル名にWindows禁則文字である「:」が含まれたファイルが存在するため、

    archive.ExtractContents( extractPath );

    の時点で「パスが不適切だ」的なエラーが表示され、展開できません。。

    禁則文字を含むファイル名のファイルを持つアーカイブを展開するにはどうすればよいでしょうか。。

    良い案をお持ちの方、何卒ご教授賜りますよう、お願いいたします。

    【圧縮元のフォルダ構成】

    [folder01]

    filename01

    filename02

    :filename03

    filename04

    ・・・

    ⇒このフォルダがLinux上でfolder01.tar.gzとして固められている。

    通常はWindows上へ持ってきて拡張子を.tgzに変更して、上のソースで展開している。

    2013年4月17日 8:26

回答

  • 「TarRrchive ExtractContents linux」で検索しただけなのですが、次のスレッドが参考になると思います。

    How to replace illegal characters in a .tgz file that is being extracted? - SharpDevelop Community
    http://community.sharpdevelop.net/forums/t/13314.aspx

    ExtractContents で一括して処理するのではなくて、TarEntry で 1 つずつ処理をする、ということのようです。
    • 回答としてマーク McLaren489 2013年4月18日 4:49
    2013年4月17日 9:18

すべての返信