SharpZipLib
SharpZipLib copied to clipboard
GZipException: 'Error GZIP header, first magic byte doesn't match'
Steps to reproduce
- Creating tgz and extracting it via the following sample code
using System;
using System.IO;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Tar;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
CreateTestFiles();
CreateTarGZ("files.tgz", @".\TestData");
CreateExtractDir();
ExtractTGZ("files.tgz", @".\Extract");
}
private static void CreateTestFiles()
{
Directory.CreateDirectory(@"TestData\0");
File.WriteAllText(@"TestData\root.txt","root");
File.WriteAllText(@"TestData\0\sub.txt","sub");
}
private static void CreateExtractDir()
{
Directory.CreateDirectory(@"Extract");
}
private static void ExtractTGZ(String gzArchiveName, String destFolder)
{
Stream inStream = File.OpenRead(gzArchiveName);
Stream gzipStream = new GZipInputStream(inStream);
var tarArchive = TarArchive.CreateInputTarArchive(gzipStream);
tarArchive.ExtractContents(destFolder);
tarArchive.Close();
gzipStream.Close();
inStream.Close();
}
private static void CreateTarGZ(string tgzFilename, string sourceDirectory)
{
Stream outStream = File.Create(tgzFilename);
Stream gzoStream = new GZipOutputStream(outStream);
var tarArchive = TarArchive.CreateOutputTarArchive(gzoStream);
tarArchive.RootPath = sourceDirectory.Replace('\\', '/');
if (tarArchive.RootPath.EndsWith("/"))
tarArchive.RootPath = tarArchive.RootPath.Remove(tarArchive.RootPath.Length - 1);
AddDirectoryFilesToTar(tarArchive, sourceDirectory, true);
tarArchive.Close();
}
private static void AddDirectoryFilesToTar(TarArchive tarArchive, string sourceDirectory, bool recurse)
{
var tarEntry = TarEntry.CreateEntryFromFile(sourceDirectory);
tarArchive.WriteEntry(tarEntry, false);
var filenames = Directory.GetFiles(sourceDirectory);
foreach (var filename in filenames)
{
tarEntry = TarEntry.CreateEntryFromFile(filename);
tarArchive.WriteEntry(tarEntry, true);
}
if (recurse)
{
var directories = Directory.GetDirectories(sourceDirectory);
foreach (var directory in directories)
AddDirectoryFilesToTar(tarArchive, directory, recurse);
}
}
}
}
Expected behavior
- The created tgz shall be extracted without an exception. With version 0.86.0.518 this once was working.
Actual behavior
- GZipException: 'Error GZIP header, first magic byte doesn't match' within tarArchive.ExtractContents()
Version of SharpZipLib
- 1.2.0.246
Obtained from (only keep the relevant lines)
- Package installed using NuGet