5

いくつかの .gz ファイルがあり、それらを 1 つずつ解凍したいと考えています。C# で GzipStream を使用して簡単なコードを作成しましたが、失敗しました。私が望むものを達成するための正しくて便利な方法を考えています。どうもありがとう。

private string Extrgz(string infile)
{
    string dir = Path.GetDirectoryName(infile);
    string decompressionFileName = dir + Path.GetFileNameWithoutExtension(infile) + "_decompression.bin";
    using (GZipStream instream = new GZipStream(File.OpenRead(infile), CompressionMode.Compress))// ArgumentException...
    {
        using (FileStream outputStream = new FileStream(decompressionFileName, FileMode.Append, FileAccess.Write))
        {
            int bufferSize = 8192, bytesRead = 0;
            byte[] buffer = new byte[bufferSize];
            while ((bytesRead = instream.Read(buffer, 0, bufferSize)) > 0)
            {
                outputStream.Write(buffer, 0, bytesRead);
            }
        }
    }
    return decompressionFileName;
}
4

2 に答える 2

10

解凍する必要がありますが、 を設定CompressionMode.Compressし、 に置き換えますCompressionMode.Decompress

はこちら

于 2013-01-20T08:55:55.277 に答える
1

ここ:

public static void DeCompressFile(string CompressedFile, string DeCompressedFile)
{
    byte[] buffer = new byte[1024 * 1024];

    using (System.IO.FileStream fstrmCompressedFile = System.IO.File.OpenRead(CompressedFile)) // fi.OpenRead())
    {
        using (System.IO.FileStream fstrmDecompressedFile = System.IO.File.Create(DeCompressedFile))
        {
            using (System.IO.Compression.GZipStream strmUncompress = new System.IO.Compression.GZipStream(fstrmCompressedFile,
                    System.IO.Compression.CompressionMode.Decompress))
            {
                int numRead = strmUncompress.Read(buffer, 0, buffer.Length);

                while (numRead != 0)
                {
                    fstrmDecompressedFile.Write(buffer, 0, numRead);
                    fstrmDecompressedFile.Flush();
                    numRead = strmUncompress.Read(buffer, 0, buffer.Length);
                } // Whend

                //int numRead = 0;

                //while ((numRead = strmUncompress.Read(buffer, 0, buffer.Length)) != 0)
                //{
                //    fstrmDecompressedFile.Write(buffer, 0, numRead);
                //    fstrmDecompressedFile.Flush();
                //} // Whend

                strmUncompress.Close();
            } // End Using System.IO.Compression.GZipStream strmUncompress 

            fstrmDecompressedFile.Flush();
            fstrmDecompressedFile.Close();
        } // End Using System.IO.FileStream fstrmCompressedFile 

        fstrmCompressedFile.Close();
    } // End Using System.IO.FileStream fstrmCompressedFile 

} // End Sub DeCompressFile


// http://www.dotnetperls.com/decompress
public static byte[] Decompress(byte[] gzip)
{
    byte[] baRetVal = null;
    using (System.IO.MemoryStream ByteStream = new System.IO.MemoryStream(gzip))
    {

        // Create a GZIP stream with decompression mode.
        // ... Then create a buffer and write into while reading from the GZIP stream.
        using (System.IO.Compression.GZipStream stream = new System.IO.Compression.GZipStream(ByteStream
            , System.IO.Compression.CompressionMode.Decompress))
        {
            const int size = 4096;
            byte[] buffer = new byte[size];
            using (System.IO.MemoryStream memory = new System.IO.MemoryStream())
            {
                int count = 0;
                count = stream.Read(buffer, 0, size);
                while (count > 0)
                {
                    memory.Write(buffer, 0, count);
                    memory.Flush();
                    count = stream.Read(buffer, 0, size);
                }

                baRetVal = memory.ToArray();
                memory.Close();
            }

            stream.Close();
        } // End Using System.IO.Compression.GZipStream stream 

        ByteStream.Close();
    } // End Using System.IO.MemoryStream ByteStream

    return baRetVal;
} // End Sub Decompress
于 2014-04-30T09:43:37.980 に答える