Не удалось распаковать zip-файл с помощью gzipstream в C# .NET 4.0
У меня есть файл. zip с одним файлом внутри него в формате csv. У меня в использовании .net версии 4.0, так что я с помощью gzipstream для распаковать файл . Но я получаю ошибку: "магическое число в заголовке GZip неверно. Убедитесь, что вы проходите в потоке GZip".
Примечание: Я должен достичь этого с помощью .net 4.0 и не могу использовать сторонние библиотеки.
Что я уже пробовал:
public MainWindow() { InitializeComponent(); OpenFileDialog ofd = new OpenFileDialog(); ofd.Multiselect = false; if(ofd.ShowDialog().HasValue && !string.IsNullOrEmpty(ofd.FileName)) { FileInfo fi = new FileInfo(ofd.FileName); Decompress(fi); } } public static void Decompress(FileInfo fileToDecompress) { using (FileStream originalFileStream = fileToDecompress.OpenRead()) { string currentFileName = fileToDecompress.FullName; string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length); using (FileStream decompressedFileStream = File.Create(newFileName)) { using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress)) { decompressionStream.CopyTo(decompressedFileStream); Console.WriteLine("Decompressed: {0}", fileToDecompress.Name); } } } }
RickZeeland
Если требуется один исполняемый файл, вы также можете использовать такие инструменты, как ILMerge или Fody Costura, чтобы объединить dll-файлы в exe-файл. Я сделал это в .NET 3.0 с помощью Ionic.Zip.Reduced.dll
Richard MacCutchan
Сообщение об ошибке совершенно ясно: либо файл не был создан с помощью GZip, либо он был поврежден. Вы должны проверить его с помощью шестнадцатеричного редактора, чтобы проверить содержимое.
Ramana Bellary
Я создал zip-файл вручную,в котором есть один csv-файл. Если zip-файл имеет файл .txt, то в этом случае я могу его распаковать.
Richard MacCutchan
Вам все равно нужно заглянуть в свой файл, чтобы понять, почему вы получаете это сообщение об ошибке.
Dave Kreskowiak
Что вы подразумеваете под "вы создали zip-файл вручную"? Как именно? Это звучит так, как будто все, что вы сделали, не создало действительного .сжатый файл.
Ramana Bellary
Я имею в виду, что я выбрал csv-файл, щелкнул правой кнопкой мыши и выбрал опцию "Отправить в сжатую Zip-папку", которая создала zip-файл.
Richard MacCutchan
Сжатие Проводник Windows создает файл в формате архива, а не с помощью gzip, pkzip и объед.
Richard Deeming
Попробуй SharpZipLib[^] или DotNetZip[^], оба из которых должны иметь возможность обрабатывать zip-файлы, созданные проводником Windows.