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

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

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

Народ помогите разобраться, вот правильно ли я сжимаю и разжимаю файлы? Просто например WinRar не может распаковать такой сжатый файл, так как пишет, что файл повреждён. А когда упаковываю, а потом распаковываю, то почему-то всё нормально. Файл после распаковки открывается. Размер остаётся тем же, что и до сжатия. И я вот, что ещё хотел спросить. А как добавлять инфу о файле? Может в конец файла записывать экземпляр FileInfo или создать свой класс, какой нибудь для этих целей написать?
Листинг программы
  1. using System.IO;
  2. using System.IO.Compression;
  3. .............
  4. .............
  5. public class GZip
  6. {
  7. public static void Compress(String fileSource, String fileDestination, int bufferSize)
  8. {
  9. using (FileStream fsInput = new FileStream(fileSource, FileMode.Open, FileAccess.Read))
  10. {
  11. using (FileStream fsOutput = new FileStream(fileDestination, FileMode.Create, FileAccess.Write))
  12. {
  13. GZipStream gzipStream = new GZipStream(fsOutput, CompressionMode.Compress);
  14. Byte[] buffer = new Byte[bufferSize];
  15. int h;
  16. while ((h = fsInput.Read(buffer, 0, bufferSize)) != 0)
  17. {
  18. gzipStream.Write(buffer, 0, h);
  19. }
  20. }
  21. }
  22. }
  23. public static void Decompress(String fileSource, String fileDestination, int bufferSize)
  24. {
  25. using (FileStream fsInput = new FileStream(fileSource, FileMode.Open, FileAccess.Read))
  26. {
  27. using (FileStream fsOutput = new FileStream(fileDestination, FileMode.Create, FileAccess.Write))
  28. {
  29. GZipStream gzipStream = new GZipStream(fsInput, CompressionMode.Decompress);
  30. Byte[] buffer = new Byte[bufferSize];
  31. int h;
  32. while ((h = gzipStream.Read(buffer, 0, bufferSize)) != 0)
  33. {
  34. fsOutput.Write(buffer, 0, h);
  35. }
  36. }
  37. }
  38. }
  39. }
Появился более конкретный вопрос. Почему этот код упаковывает, но не правильно распаковывает именно текстовые файлы?
Листинг программы
  1. //Начать сжатие
  2. private void btnStartPack_Click(object sender, RoutedEventArgs e)
  3. {
  4. FileInfo fi = new FileInfo(this.textBoxFilePath.Text);
  5. String compressedFile = fi.FullName +".gz";
  6. String decompressedFile = GetFileNameWithoutExtension(compressedFile);
  7. String part2 = GetFileNameWithoutExtension(decompressedFile);
  8. decompressedFile = part2 + "_.txt";
  9. GZip.CompressFile(this.textBoxFilePath.Text, compressedFile, 2048);
  10. GZip.DecompressFile(compressedFile, decompressedFile, 2048);
  11. }
  12. private String GetFileNameWithoutExtension(String FileName)
  13. {
  14. FileInfo fi = new FileInfo(FileName);
  15. int realLengthFileName = fi.FullName.Length - fi.Extension.Length;
  16. return fi.FullName.Substring(0, realLengthFileName);
  17. }
Вот чуть подправил на скорую руку:
Листинг программы
  1. //Начать сжатие
  2. private void btnStartPack_Click(object sender, RoutedEventArgs e)
  3. {
  4. FileInfo fi = new FileInfo(this.textBoxFilePath.Text);
  5. String compressedFile = fi.FullName +".gz";
  6. String decompressedFile = GetFileNameWithoutExtension(compressedFile);
  7. String part2 = GetFileNameWithoutExtension(decompressedFile);
  8. decompressedFile = decompressedFile.Insert(part2.Length, "_");
  9. GZip.CompressFile(this.textBoxFilePath.Text, compressedFile, 2048);
  10. GZip.DecompressFile(compressedFile, decompressedFile, 2048);
  11. }
  12. private String GetFileNameWithoutExtension(String FileName)
  13. {
  14. FileInfo fi = new FileInfo(FileName);
  15. int realLengthFileName = fi.FullName.Length - fi.Extension.Length;
  16. return fi.FullName.Substring(0, realLengthFileName);
  17. }

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

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

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


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

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

11   голосов , оценка 3.818 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы