I am using the C # GZipStream class to compress some input. The problem is that this input is empty. In this case, it creates a file with 0 bytes. When I try to use 7zip to unzip the resulting .gz file, it gives an error stating that the format is invalid. If I have non-empty input, it works fine. Tell me, how can I create a valid .gz file that will be unpacked into a file with byte 0?
var file = new FileStream("foo.txt.gz", FileMode.Create, FileAccess.ReadWrite); var gzip = new GZipStream(file, CompressionMode.Compress); var writer = new StreamWriter(gzip); for (string line in input) { writer.Write(line); } writer.Close(); gzip.Close(); file.Close();
In the above code, if my "input" array is empty, I end up writing a file called foo.txt.gz with 0 bytes, and 7zip says the file is not valid. But if I have a non-empty array, I get a valid file. Please tell me how I can change my code to solve the problem, so that I get a valid .gz file, even if the input is empty. Thanks!
EDIT: This may be a bug in .NET. If you notice the same problem and agree that this is a mistake, vote: https://connect.microsoft.com/VisualStudio/feedback/details/888912/gzipstream-creates-invalid-gz-files-when-input-is-empty
source share