2012-01-14 82 views
3

私のソリューションに埋め込みリソースを追加する方法を探しています。このリソースは、多数のファイルを含むフォルダになります。ユーザーの要求に応じて、それらを解凍する必要があります。C#を使用してtarファイルの解凍

私は、このようなフォルダをサードパーティのライブラリを使わずに実行ファイルに保存する方法を探しています(むしろ愚かですが、これが課題です)。

標準ライブラリを使用してGZipとUnGZipできることがわかりました。しかし、GZipは単一のファイルのみを扱います。そのような場合、TARが現場に来るはずです。しかし、私は標準クラスの中でTAR実装を見つけていません。

TARをベアC#で解凍することは可能でしょうか?

答えて

2

外部のライブラリを使用することはできませんので、特定の形式のtarファイルに制限されていません。実際には、同じファイル内にすべてがある必要はありません。

C#でディレクトリーツリーを歩き回る独自のtarのようなユーティリティーを作成し、オフセット/長さのペアに合わせてSystem.IO.Pathのインスタンスをマッピングするシリアライズされたディクショナリーからなる「ヘッダー」ファイルと、 1つの巨大なブロブに連結された個々のファイルの内容を含むファイル。これは簡単な作業ではありませんが、過度に複雑ではありません。

4

まずあなたがGzipstreamクラスを使用することができますし、中に任意のファイルを圧縮ので、もしDeflatStream両方が実際に.gzの形式でファイルを圧縮しないことができます.NETで解凍/圧縮する2つの方法がありますtar-cs

using (FileStream unarchFile = File.OpenRead(tarfile)) 
{ 
    TarReader reader = new TarReader(unarchFile); 
    reader.ReadToEnd("out_dir"); 
} 
0

を参照してください。 Gzipstreamは、winzip/winrar、7zipなどの一般的な圧縮アプリケーションで開くことができますが、DeflatStreamで圧縮ファイルを開くことはできません。これらの2つのクラスは、.NET 2からです。

そして、実際にはGzipstreamとDeflatStreamと同じですが、Winzip/winrar、7zipで開くことができる複数のファイルを圧縮することができます。 .NETのすべてがそうです。それは一般的な.zipファイルでもありません。 マイクロソフトでは、* x拡張オフィスファイルを圧縮するために使用しています。パッケージクラスを持つdocxファイルを解凍すると、その中に格納されているすべてのものを見ることができます。一般的な圧縮ファイルを作成したり、汎用のzipファイルを解凍することさえできないため、圧縮または解凍に.NETライブラリを使用しないでください。 http://www.icsharpcode.net/OpenSource/SharpZipLib/

などのサードパーティライブラリを検討するか、1階からすべてを実装する必要があります。

4

Tar-csは仕事をしますが、かなり遅いです。はるかに速いSharpCompressを使用することをお勧めします。他の圧縮タイプもサポートしており、最近更新されています。

using System; 
using System.IO; 
using SharpCompress.Common; 
using SharpCompress.Reader; 

private static String directoryPath = @"C:\Temp"; 

public static void unTAR(String tarFilePath) 
{ 
    using (Stream stream = File.OpenRead(tarFilePath)) 
    { 
     var reader = ReaderFactory.Open(stream); 
     while (reader.MoveToNextEntry()) 
     { 
      if (!reader.Entry.IsDirectory) 
      { 
       reader.WriteEntryToDirectory(directoryPath, ExtractOptions.ExtractFullPath | ExtractOptions.Overwrite); 
      } 
     } 
    } 
} 
関連する問題