4

これが私の最初の質問ですので、ご容赦ください。

私が目指しているのは、C#で基本的な.zipアーカイブを作成することです。.NETの組み込みGZipStreamクラスを使用してみましたが、これを達成できましたが、アーカイブファイルの拡張子が失われない限り、ファイルに「usercode.zip」という名前を付けることができないという問題があります。制約のため、プログラムにこれらのファイルを「usercode.trf.zip」として作成させることはできません。これは、ファイル名の拡張子をアーカイブ内にそのまま残す唯一の方法です。

他の多くのzipライブラリを使用してみましたが、それらを適切に、または希望どおりに動作させることができないようです。

LZMA(または7-zip)ライブラリを使用してファイルを圧縮するための便利な関数を提供するSevenZipHelperライブラリに出くわしました。

私が使用しているコードは次のようになります。

//Take the BF file and zip it, using 7ZipHelper
BinaryReader bReader = new BinaryReader(File.Open(pFileName, FileMode.Open));
byte[] InBuf = new byte[Count];

bReader.Read(InBuf, 0, InBuf.Length);
Console.WriteLine("ZIP: read for buffer length:" + InBuf.Length.ToString());

byte[] OutBuf = SevenZip.Compression.LZMA.SevenZipHelper.Compress(InBuf);

FileStream BZipFile = new FileStream(pZipFileName, FileMode.OpenOrCreate, FileAccess.Write);
BZipFile.Seek(0, SeekOrigin.Begin);
BZipFile.Write(OutBuf, 0, OutBuf.Length);
BZipFile.Close();

これにより、7-zipアルゴリズムを使用して、圧縮ファイルが適切に作成されます。問題は、このプログラムを使用しているクライアントが7-zipにアクセスできることを保証できないため、ファイルは通常のzipアルゴリズムである必要があることです。ヘルパーと7-zipライブラリを確認しましたが、このライブラリを使用して、通常の「ZIP」アルゴリズムでファイルを圧縮できるようです。私はこれを行う方法を理解できないようです。いくつかの場所でプロパティの設定に気づきましたが、これを設定する場所を教えてくれるドキュメントやグーグルが見つかりません。

これを行うにはおそらくもっと良い方法があり、何かが足りないだけだと思いますが、そのようなおそらく簡単な作業に永遠に座って苦労することはできません。どんな助けでも大歓迎です。

4

1 に答える 1

4

必要に応じて、このライブラリをご覧ください。以前に使用したことがあり、非常に簡単に使用できます: dotnetzip

編集(例):

 using (ZipFile zip = new ZipFile())
        {
            foreach (String filename in FilesList)
            {
                Console.WriteLine("Adding {0}...", filename);
                ZipEntry e = zip.AddFile(filename,"");
                e.Comment = "file " +filename+" added "+DateTime.Now;
            }
            Console.WriteLine("Done adding files to zip:" + zipName);
            zip.Comment = String.Format("This zip archive was created by '{0}' on '{1}'",
               System.Net.Dns.GetHostName(), DateTime.Now);

            zip.Save(zipName);
            Console.WriteLine("Zip made:" + zipName);
        }
于 2011-05-05T10:12:39.807 に答える