Davide Piras
Davide Piras

Reputation: 44595

GZipStream works but extension is lost

I am using following code to zip a file and it works fine but when I decompress with WinRar I get the original file name without the extension, any clue why if filename is myReport.xls when I decompress I get only myReport ?

using (var fs = new FileStream(fileName, FileMode.Open))
{
    byte[] input = new byte[fs.Length];
    fs.Read(input, 0, input.Length);
    fs.Close();

    using (var fsOutput = new FileStream(zipName, FileMode.Create, FileAccess.Write))
    using(var zip = new GZipStream(fsOutput, CompressionMode.Compress))
    {
        zip.Write(input, 0, input.Length);
        zip.Close();
        fsOutput.Close();
    }
}

Upvotes: 11

Views: 8635

Answers (2)

Robert
Robert

Reputation: 42575

GZip compresses only one file - without knowing the name. Therefore if you compress the file myReport.xls you should name it myReport.xls.gz. On decompression the last file extension will be removed so you end up with the original filename.

That its the way how it is used in Unix/Linux for ages...

Upvotes: 29

Moo-Juice
Moo-Juice

Reputation: 38825

Very weird indeed. A brief search came up with the following:

http://dotnetzip.codeplex.com/discussions/268293

Which says that GZipStream has no way of knowing the name of the stream that is being written, and suggests you set the FileName property directly.

Hope that helps.

Upvotes: 2

Related Questions