GZipStream. Сжатие, распаковка файла. - C#

Узнай цену своей работы

Формулировка задачи:

Народ помогите разобраться, вот правильно ли я сжимаю и разжимаю файлы? Просто например WinRar не может распаковать такой сжатый файл, так как пишет, что файл повреждён. А когда упаковываю, а потом распаковываю, то почему-то всё нормально. Файл после распаковки открывается. Размер остаётся тем же, что и до сжатия. И я вот, что ещё хотел спросить. А как добавлять инфу о файле? Может в конец файла записывать экземпляр FileInfo или создать свой класс, какой нибудь для этих целей написать?
using System.IO;
using System.IO.Compression;
.............
.............
 
    public class GZip
    {
        public static void Compress(String fileSource, String fileDestination, int bufferSize)
        {
            using (FileStream fsInput = new FileStream(fileSource, FileMode.Open, FileAccess.Read))
            {
                using (FileStream fsOutput = new FileStream(fileDestination, FileMode.Create, FileAccess.Write))
                {
                    GZipStream gzipStream = new GZipStream(fsOutput, CompressionMode.Compress);
                    Byte[] buffer = new Byte[bufferSize];
                    int h;
 
                    while ((h = fsInput.Read(buffer, 0, bufferSize)) != 0)
                    {
                        gzipStream.Write(buffer, 0, h);
                    }
                }
            }
        }
 
        public static void Decompress(String fileSource, String fileDestination, int bufferSize)
        {
            using (FileStream fsInput = new FileStream(fileSource, FileMode.Open, FileAccess.Read))
            {
                using (FileStream fsOutput = new FileStream(fileDestination, FileMode.Create, FileAccess.Write))
                {
                    GZipStream gzipStream = new GZipStream(fsInput, CompressionMode.Decompress);
                    Byte[] buffer = new Byte[bufferSize];
                    int h;
 
                    while ((h = gzipStream.Read(buffer, 0, bufferSize)) != 0)
                    {
                        fsOutput.Write(buffer, 0, h);
                    }
                }
            }
        }
    }
Появился более конкретный вопрос. Почему этот код упаковывает, но не правильно распаковывает именно текстовые файлы?
        //Начать сжатие
        private void btnStartPack_Click(object sender, RoutedEventArgs e)
        {
            FileInfo fi = new FileInfo(this.textBoxFilePath.Text);
            String compressedFile = fi.FullName +".gz";
            String decompressedFile = GetFileNameWithoutExtension(compressedFile);
            String part2 = GetFileNameWithoutExtension(decompressedFile);
            decompressedFile = part2 + "_.txt";
 
            GZip.CompressFile(this.textBoxFilePath.Text, compressedFile, 2048);
            GZip.DecompressFile(compressedFile, decompressedFile, 2048);
        }
 
        private String GetFileNameWithoutExtension(String FileName)
        {
            FileInfo fi = new FileInfo(FileName);
            int realLengthFileName = fi.FullName.Length - fi.Extension.Length;
            return fi.FullName.Substring(0, realLengthFileName);
        }
Вот чуть подправил на скорую руку:
        //Начать сжатие
        private void btnStartPack_Click(object sender, RoutedEventArgs e)
        {
            FileInfo fi = new FileInfo(this.textBoxFilePath.Text);
            String compressedFile = fi.FullName +".gz";
            String decompressedFile = GetFileNameWithoutExtension(compressedFile);
            String part2 = GetFileNameWithoutExtension(decompressedFile);
 
            decompressedFile = decompressedFile.Insert(part2.Length, "_");
 
            GZip.CompressFile(this.textBoxFilePath.Text, compressedFile, 2048);
            GZip.DecompressFile(compressedFile, decompressedFile, 2048);
        }
 
        private String GetFileNameWithoutExtension(String FileName)
        {
            FileInfo fi = new FileInfo(FileName);
            int realLengthFileName = fi.FullName.Length - fi.Extension.Length;
            return fi.FullName.Substring(0, realLengthFileName);
        }

Решение задачи: «GZipStream. Сжатие, распаковка файла.»

textual
Листинг программы
Path.ChangeExtension("gz");

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.818 из 5
Похожие ответы