Андрей Смирнов
Время чтения: ~9 мин.
Просмотров: 6

Как следует архивировать файлы? Работа с программой WinRar.

arhivator-300x184.jpgНе хватает места на флешке или не получается отправить папку с фотографиями по электронной почте? Следует использовать архивы. Но как заархивировать папку или файл? Существует много программ, предназначенных для архивации данных, но, как всегда, есть и наиболее популярные. К ним относится архиватор WinRar. Наверное, всем, кто хоть немного работал с компьютером, известна эта утилита, но, как показывает практика, работать с ней правильно может не каждый. В этой статье я хочу рассказать о ее основных возможностях, о том, как архивировать файлы правильно.

Основные функции архиватора.

Его главное назначение – уменьшение размера файлов. Количество информации, с которым нам приходится работать и хранить, растет все быстрее, поэтому возникает проблема размещения ее на жестких дисках, флешках, CD- и DVD-дисках. Сжатие позволяет сократить размеры файлов или папок на 20-30%. Следует сразу отметить, что не все файлы сжимаются хорошо. Например, оптимизированные изображения в формате .jpeg будут иметь небольшую степень сжатия.

Бесплатный мастер-класс

«Самый простой и быстрый способ получать от 1000 рублей и более в день»

knopka.png

Вторая функция программы – объединение нескольких файлов в один сжатый, причем каждый из них внутри  сохраняет свое имя. Это дает возможность отправлять по электронной почте или загружать на сайт сразу большое количество документов.

Кроме этих основных функций эти утилиты могут выполнять и некоторые другие операции, о которых я расскажу ниже.

Интерфейс WinRar

Скачать и установить программу не составит для вас особого труда. После установки по умолчанию ее ярлык появится в основном меню и, кроме этого, в контекстное меню добавятся новые пункты (хотя при установке настройки можно изменять).

Основное окно программы WinRar содержит текстовое меню с выпадающими командами, графическое меню с кнопками основных команд, адресную строку для выбора каталога и, собственно, рабочее окно со списком файлов и папок, аналогичное окну проводника Windows.

Рассмотрим основные команды. Картинку можно увеличить, щелкнув на ней.

  • Добавить – создает новый архив или добавляет файлы в ранее созданный.
  • Извлечь – извлекает данные из архива.
  • Тест – проверка на наличие ошибок.
  • Просмотр – показывает содержимое.
  • Удалить – удаляет выделенный файл или папку.
  • Найти – поиск файлов или папок.
  • Мастер – новая функция, благодаря которой новичок получает пошаговые подсказки.
  • Информация – показывает информацию о выделенном объекте.
  • Исправить – исправляет ошибки.

Форматы архивов

Архивирование – сложный математический процесс, осуществляемый с кодом. Выполняться он может по различным алгоритмам, которые постоянно совершенствуются. Именно поэтому существует много форматов архивных файлов — .rar, .tar, .zip, .taz, .gz и другие. WinRar работает с большинством этих форматов.

Кстати, при установке программы можно указать, поставив галочки, с какими форматами она будет работать. Это можно сделать и потом, выполнив команды

Параметры – Установка – Интеграция

Создание архива

Создать его можно разными способами.

1 способ.

Запускаем программу, щелкнув по ярлыку в меню Пуск или на Рабочем столе (если вы его там создали), выбираем в открывшемся окне документы, которые мы хотим заархивировать, и щелкаем на кнопке Добавить. Теперь перед нами открывается самое важное диалоговое окно – настройка будущего архива. Что же здесь можно настроить?

На вкладке Общие:

  • Даем название архиву.
  • Выбираем его тип: RAR, RAR5, ZIP
  • Метод сжатия.
  • Размер словаря.
  • Размер тома. WinRar может создавать многотомные архивы, о них – ниже.
  • Установить пароль. Эта функция используется, если нужно закрыть информацию от постороннего доступа.
  • Кроме этих настроек есть еще несколько чекбоксов, где можно поставить галочки. Немного о них.
  • Удалить файлы после архивации. Здесь, я думаю, все понятно.
  • Создать SFX-архив. Это так называемый самораспаковывающийся архив. О нем подробнее — ниже.
  • Создать непрерывный архив. В нем все данные сохраняются единым потоком, благодаря чему получается более высокая степень сжатия, но операции, например, добавление данных, выполняются медленнее. Создавать непрерывный архив целесообразно, если сжимается много небольших файлов и в дальнейшем не предполагается никаких модификаций.
  • Если вы выбрали максимальную степень сжатия, или в вашем списке много объектов, то рекомендуется добавить данные для восстановления, так как есть вероятность получения ошибок.
  • Протестировать файлы после упаковки. Это тоже понятно.
  • Заблокировать архив. Это делается для того, чтобы потом даже с помощью программы WinRar его нельзя было изменить.

2 способ

Этот способ подразумевает использование контекстного меню. Выделяем файлы, подлежащие сжатию, щелкаем ПКМ и выбираем пункт Добавить в архив. Screenshot_11.jpgПосле этого появляется окно настроек, которое мы рассмотрели выше.

3 способ

Он используется чаще других, так как является самым простым. Также как и в первом способе, используется контекстное меню, но выбирается пункт Добавить в архив Имя архива.rar. В этом случае сразу создается том с указанным именем и настройками по умолчанию.

Профили архивирования

Когда мы рассматривали окно настроек, то пропустили кнопку Профили. Эта кнопка позволяет создать несколько профилей с заданными настройками, выбрать профиль, используемый по умолчанию.

После установки уже имеется несколько готовых профилей:

  • Профиль по умолчанию
  • Прикрепление к E-mail
  • Многотомный архив
  • Zip-архив.

Создание самораспаковывающегося архива

Если при создании архива в диалоговом окне настроек поставить галочку в чекбокс Создать SFX-архив, то будет создан самораспаковывающийся архив. Что это такое? Такие архивы предназначены для распаковки без использования архиватора. Они имеют расширение .exe, то есть сами являются программами. Можно сказать, что в них данные объединены с упрощенной версией архиватора, предназначенной для распаковки именно этого архива. Конечно, они больше по размерам, чем обычные. Можно даже заметить, что, если создавать SFX-архив из маленького файла, его размер может оказаться больше, чем исходный.

Извлечение файлов из архива

Извлечь данные из с помощью программы WinRar очень просто. Это можно сделать двойным щелчком на значке архива, или выбрав значок в окне уже открытой программы. После этого в этом окне отобразятся заархивированные файлы и папки.

Можно извлечь отдельные файлы. Для этого нужно их предварительно выделить. Можно распаковать весь архив, для этого выделен должен быть значок папки с многоточием наверху списка.

После выбора нажимаем кнопку Извлечь и в открывшемся окне Проводника выбираем место для сохранения распакованных файлов.

Иногда допускается такая ошибка при работе с сжатой информацией — файлы открываются непосредственно из окна архиватора. После работы с ним его нужно сохранять дважды: сначала сохраняем изменения в документе, а потом обновляем архив. Screenshot_111.jpgВторую операцию многие неопытные пользователи иногда не выполняют, особенно, если диалоговые окна не русифицированы. Я же рекомендую сначала распаковать том, а потом работать с полученными документами.

Еще одна полезная функция утилиты WinRar, которую я часто использую – распаковка образов дисков. Он прекрасно распаковывает образы в форматах .iso, .mdf, .nrg.  Такие форматы часто применяются для распространения через Интернет больших программных пакетов.

Таковы самые основные возможности архиватора WinRar. Напишите в комментариях, как вы используете эту программу, какие еще не всем известные возможности у нее есть.

Поделитесь статьей в социальных сетях.

Как мы видим в содержимом файла есть много повторов. А значит первое что должно прийти в голову — «нужно как-то избавиться от них». Решение данной проблемы вполне легко себе представить, ведь можно например, заменить все повторяющиеся подряд байты всего двумя. Первый будет указывать на число повторов, второй на повторяющийся байт.

Как видим файл не уменьшился, а стал больше. Поэтому нужно вводить еще одно правило архивации. Не трудно заметить, что структура архива такова, что его можно считывать парами байт. При этом каждый четный байт не будет нулевым, так как он отвечает за количество повторяющихся символов и как минимум будет равен единице. Введем следующее правило: если четный байт равен нулю, то далее идет байт-число неповторяющихся байт, за ним идут непосредсвенно эти байты.

Очевидно что такая конструкция не приводит к уменьшению числа байт, однако это увеличение крайне мало, по сравнению с первым методом. Приходится чем то жертвовать…

Вот теперь наш файл стал меньше, чучуть, но меньше. Если подумать, то можно еще усовершенствовать данный алгоритм, например анализирую группу байт на повтор. Но этого мы делать не будет.

Сейчас же мы рассмотрим реализацию описанного метода на языке программирования C#.Архивация файла

  public static void Zip(string FileRes, string FileDest)          {              FileStream fs = null; //исходный файл              FileStream rs = null; //архив              try              {                  if (File.Exists(FileDest))                      File.Delete(FileDest);                  string Format = FileRes.Substring(FileRes.LastIndexOf('.') + 1); //получаем формат файла                  fs = new FileStream(FileRes, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);                  rs = new FileStream(FileDest, FileMode.CreateNew);                  //сначала сохраним формат исходного файла                  rs.WriteByte((byte)Format.Length);                  for (int i = 0; i < Format.Length; ++i)                      rs.WriteByte((byte)Format[i]);                    List Bt = new List();                  List nBt = new List();                  while (fs.Position < fs.Length)                  {                      byte B = (byte)fs.ReadByte();                      if (Bt.Count == 0)                          Bt.Add(B);                      else if (Bt[Bt.Count - 1] != B)                      {                          //неповторяющиеся байты                          Bt.Add(B);                          if (Bt.Count == 255)                          {                              rs.WriteByte((byte)0);                              rs.WriteByte((byte)255);                              rs.Write(Bt.ToArray(), 0, 255);                              Bt.Clear();                          }                      }                      else                      {                          //повтор                          if (Bt.Count != 1)                          {                              //в буфере могут быть неповторяющиеся байты                              //их нужно сохранить                              rs.WriteByte((byte)0);                              rs.WriteByte((byte)(Bt.Count - 1));                              rs.Write(Bt.ToArray(), 0, Bt.Count - 1);                              Bt.RemoveRange(0, Bt.Count - 1);                          }                          Bt.Add(B);                          while ((B = (byte)fs.ReadByte()) == Bt[0])                          {                              //пока идут повторы сохраняем их в буфер                              Bt.Add(B);                              if (Bt.Count == 255)                              {                                  rs.WriteByte((byte)255);                                  rs.WriteByte(Bt[0]);                                  Bt.Clear();                                  break;                              }                          }                          if (Bt.Count > 0)                          {                              //если в буфере что-то есть, сохраняем это                              rs.WriteByte((byte)Bt.Count);                              rs.WriteByte(Bt[0]);                              Bt.Clear();                              Bt.Add(B);                          }                      }                  }                  if (Bt.Count > 0)                  {                      //после просмотра файла у нас может быть буфер с неповторяющимися байтами                      rs.WriteByte((byte)0);                      rs.WriteByte((byte)Bt.Count);                      rs.Write(Bt.ToArray(), 0, Bt.Count);                  }              }              catch (Exception ex)              {                  MessageBox.Show(ex.Message);              }              finally              {                  if (fs != null) fs.Close();                  if (rs != null) rs.Close();              }          }  

Распаковка файла

  public static void UnZip(string FileRes, string FolderDest)          {              if (!File.Exists(FileRes)) return;              FileStream fs = null;              FileStream rs = null;              try              {                  if (FolderDest[FolderDest.Length - 1] != '\') FolderDest += '\';                  string FileName = FileRes.Split('\')[FileRes.Split('\').Length - 1];                  string Name = FolderDest + FileName.Substring(0, FileName.LastIndexOf('.'));                  string Format = ".";                  fs = new FileStream(FileRes, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);                  int FormatLen = fs.ReadByte();                  for (int i = 0; i < FormatLen; ++i)                      Format += (char)fs.ReadByte();                  if (File.Exists(Name + Format))                      File.Delete(Name + Format);                  rs = new FileStream(Name + Format, FileMode.CreateNew);                  while (fs.Position < fs.Length)                      {                          int Bt = fs.ReadByte();                          if (Bt == 0) //различные байты                          {                              Bt = fs.ReadByte();                              for (int j = 0; j < Bt; ++j)                              {                                  byte b = (byte)fs.ReadByte();                                  rs.WriteByte(b);                              }                          }                          else //повторы                          {                              int Value = fs.ReadByte();                              for (int j = 0; j < Bt; ++j)                                  rs.WriteByte((byte)Value);                          }                      }              }              catch (Exception ex)              {                  MessageBox.Show(ex.Message);              }              finally              {                  if (fs != null) fs.Close();                  if (rs != null) rs.Close();              }          }  

Простой способ создать архив zip на С++ | Программирование С++

Архивируем файлы из папки в zip архив. Простой способ.

 Unit1.cpp

//---------------------------------------------------------------------------    #include   #pragma hdrstop    #include "Unit1.h"  #include <syst zip="" package="" resource="" tform1="" __fastcall="" owner="" tform="" void="" tzipfile="" new="">ZipDirectoryContents("C:\111\zip.zip", "C:\222"); //В какую папку сделать архив. Какую папку заархивировать.   zip ->Close(); //Закрываем   zip ->Free(); //Очищаем  }  //---------------------------------------------------------------------------</syst>

 Unit1.h

//---------------------------------------------------------------------------    #ifndef Unit1H  #define Unit1H  //---------------------------------------------------------------------------  #include <systclude class="" tform1="" public="" tform="" ide-managed="" components="" tbutton="" void="" __fastcall="" button1click="" user="" declarations="" owner="" extern="" package="">
Подробности
Родительская категория: Уроки и примеры программирования C++ Embarcadero RAD Studio 10 | C++ Builder 10
Категория: Примеры с архивами
  • Вы здесь:  
  • Главнаяarrow.png
  • Уроки и примеры по программированию С++arrow.png
  • Уроки и примеры программирования на C++ в Embarcadero RAD Studio 10 | C++ Builder 10arrow.png
  • Примеры с архивамиarrow.png
  • Простой способ создать архив zip на С++ | Программирование С++

Используемые источники:

  • https://kviter.ru/kak-arhivirovat-faylyi-rabota-s-programmoy-winrar
  • https://blog.foolsoft.ru/c-prostoj-arxivator/
  • https://cpptutor.ru/index.php/uroki-programmirovanie/c-builder10/43-prostoj-sposob-sozdat-arkhiv-zip-na-s

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации