Ramana Bellary Ответов: 0

Не удалось распаковать 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.

0 Ответов