На нашем сайте Вы сможете найти готовые курсовые и дипломные работы по программированию
Сейчас работаем

Архиватор C#

Описание

Пусть дан файл со следующим содержимым (байты):15 12 00 00 00 00 00 00 00 00 00 00 00 00 44 4444 55 77 44 AF 00 00 11 11 12 45 45 00 00 00 0001 02 03 04 05 01 02 03 04 05 06 01 02 03 04 05

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

Например было: 00 00 00 00 00 00 00 00Стало: 08 00

Однако тут стоит помнить, что максимальное значение байта (FF или 255). Значит мы можем сокращать цепочки максимум из 255 одинаковых байтов. На самом деле можно сократить цепочку в 256 байтов, для этого нужно начинать нумерацию с нуля, однако я не буду этого делать.Так же стоит помнить о том, что файл нужно разархивировать, а значит нужен способ декодирования. Чтобы была возможность однозначно восставовить файл придется использовать данный метод и к неповторяющимся байтам. А это уже может повлечь за собой рост размера архива, так как один байт исходного файла заменяется двумя байтами в архиве.

В итоге для нашего исходного файла имеем:

01 15 01 12 0С 00 03 44 01 55 01 77 01 44 01 AF02 00 02 11 01 12 02 45 04 00 01 01 01 02 01 0301 04 01 05 01 01 01 02 01 03 01 04 01 05 01 0601 01 01 02 01 03 01 04 01 05

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

Например было: 01 02 03 04 AA AB AC AEСтало: 00 08 01 02 03 04 AA AB AC AE

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

Теперь применим оба правила к нашему файлу.

Имеем:

00 02 15 12 0С 00 03 44 00 04 55 77 44 AF 02 0002 11 00 01 12 02 45 04 00 00 10 01 02 03 04 0501 02 03 04 05 06 01 02 03 04 05

Вот теперь наш файл стал меньше, чучуть, но меньше. 

Функционал программы

Архивация и распаковка файлов

Фрагмент программного кода

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Archivator.Classes;

namespace Archivator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog OPF = new OpenFileDialog();
            if (OPF.ShowDialog() != DialogResult.OK)
            {
                MessageBox.Show("Файл не выбран! Попробуйте еще раз");
            }
            else { 
                label2.Text = OPF.FileName;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Zip.ZipVoid(label2.Text, label4.Text);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Zip.UnZip(label2.Text, label4.Text);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
            if (folderBrowserDialog.ShowDialog() != DialogResult.OK)
            {
                MessageBox.Show("Путь не выбран! Попробуйте еще раз");
            }
            else {
                label4.Text = folderBrowserDialog.SelectedPath;
            }               
        }
    }
}

Скриншот архива с проектом

Пояснения по запуску программы

Если нужно редактировать код нужно скачать Visual StudioФайл который можно запустить находится в папке bin

Купить 599,00 
Сразу после оплаты Вы сможете скачать работу и мы вышлем дополнительно файл с работой на электронную почту. Исходник программ Вы сможете отредактировать, как Вам нужно.
Комментарии (0)

anna220699

/ /

Оставить комментарий

Ты не можешь комментировать

Только зарегистрированые пользователи имеют возможность комментировать работы
Купить

599,00 

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

Заказать через

Archivator.rar
59526
Оцени работу

рейтинг

Архиватор C#
Архивирует файлы в указанную пользователем папку, программа написана на C#
Категория: Образование
Стоимость: 599,00