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");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д