Skip to content

demetrius2003/MariaARK

Repository files navigation

MariaARK - Продвинутый архиватор v3.0

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

📋 Содержание


✨ Возможности

Основные функции

  • Множество алгоритмов сжатия: STOR, DEFL, LZ77, LZSS, LZW, LZHF
  • Шифрование: AES-256 с паролем
  • Многотомные архивы: Разбиение на тома заданного размера
  • Солидные архивы: Максимальное сжатие всех файлов как единого блока
  • Рекурсивное архивирование: Автоматическое добавление подкаталогов
  • Режим обновления: Обновление только измененных файлов
  • Исключения: Исключение файлов по маскам
  • Комментарии: Комментарии к архиву и отдельным файлам
  • Пароли файлов: Отдельные пароли для отдельных файлов
  • Wildcards: Поддержка масок * и ?
  • Прогресс-бар: Визуальная индикация процесса
  • CRC32: Проверка целостности данных
  • Резервные копии: Автоматическое создание .bak файлов

Дополнительные возможности

  • ✅ Сохранение структуры каталогов
  • ✅ Сохранение атрибутов файлов и дат
  • ✅ Цветной вывод в консоли
  • ✅ Предупреждения о больших файлах (>2GB)
  • ✅ Валидация путей и имен файлов
  • ✅ Обработка ошибок с подробными сообщениями
  • Фабрика компрессоров: Упрощенное создание и управление компрессорами
  • Валидация версий: Проверка совместимости версий формата
  • Улучшенный алгоритм Хаффмана: Оптимизированное сжатие для LZHF
  • Защита от timing attacks: Безопасная проверка паролей

📦 Установка

Требования

  • Windows (протестировано на Windows 10)
  • .NET Framework 4.5 или выше
  • MSBuild 14.0 или выше (для компиляции)

Компиляция из исходников

# Клонируйте репозиторий
git clone <repository-url>
cd archivers_marc

# Скомпилируйте проект
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" MariaARK.sln /t:Build /p:Configuration=Release

# Исполняемый файл будет в:
# MariaARK\bin\Release\MariaARK.exe

Использование готового исполняемого файла

Просто скопируйте MariaARK.exe в любую директорию и добавьте её в PATH, или используйте полный путь к файлу.


🚀 Быстрый старт

Создание простого архива

# Создать архив с файлами
MariaARK.exe a archive.mark file1.txt file2.txt

# Просмотреть содержимое
MariaARK.exe l archive.mark

# Извлечь все файлы
MariaARK.exe x archive.mark

# Проверить целостность
MariaARK.exe t archive.mark

Создание сжатого архива

# Создать архив с Deflate сжатием
MariaARK.exe a archive.mark *.txt -mDEFL

# С максимальным уровнем сжатия
MariaARK.exe a archive.mark *.txt -mDEFL -l9

Создание зашифрованного архива

# Создать архив с паролем
MariaARK.exe a archive.mark *.txt -p"мой_пароль" -mDEFL

# При извлечении будет запрошен пароль
MariaARK.exe x archive.mark

См. также: QUICKSTART.md для более подробных примеров.


📖 Команды

a или add - Создание/обновление архива

Создает новый архив или обновляет существующий.

Синтаксис:

MariaARK.exe a <archive.mark> <file1> [file2] ... [опции]

Примеры:

# Простое создание архива
MariaARK.exe a archive.mark file1.txt file2.txt

# С методом сжатия
MariaARK.exe a archive.mark *.txt -mDEFL

# С рекурсией
MariaARK.exe a archive.mark folder -r -mDEFL

# С исключениями
MariaARK.exe a archive.mark folder -r -x"*.tmp" -x"*.log"

x или extract - Извлечение файлов

Извлекает файлы из архива.

Синтаксис:

MariaARK.exe x <archive.mark> [output_path] [pattern/files]

Примеры:

# Извлечь все файлы в текущую директорию
MariaARK.exe x archive.mark

# Извлечь в указанную директорию
MariaARK.exe x archive.mark C:\output

# Извлечь только определенные файлы
MariaARK.exe x archive.mark . file1.txt file2.txt

# Извлечь по маске
MariaARK.exe x archive.mark . *.txt

l или list - Просмотр содержимого

Показывает список файлов в архиве.

Синтаксис:

MariaARK.exe l <archive.mark> [pattern]

Примеры:

# Показать все файлы
MariaARK.exe l archive.mark

# Показать только .txt файлы
MariaARK.exe l archive.mark *.txt

t или test - Проверка целостности

Проверяет целостность архива с помощью CRC32.

Синтаксис:

MariaARK.exe t <archive.mark> [pattern]

Примеры:

# Проверить весь архив
MariaARK.exe t archive.mark

# Проверить только определенные файлы
MariaARK.exe t archive.mark *.txt

d или delete - Удаление файлов

Удаляет файлы из архива.

Синтаксис:

MariaARK.exe d <archive.mark> <pattern>

Примеры:

# Удалить файл
MariaARK.exe d archive.mark file1.txt

# Удалить по маске
MariaARK.exe d archive.mark *.tmp

⚙️ Опции

Опции создания архива (a команда)

-m<метод> - Метод сжатия

Указывает метод сжатия для файлов.

Доступные методы:

  • STOR - Без сжатия (по умолчанию)
  • DEFL - Deflate
  • LZ77 - LZ77
  • LZSS - LZSS
  • LZW - LZW
  • LZHF - LZ77 + Adaptive Huffman

Пример:

MariaARK.exe a archive.mark *.txt -mDEFL

-l<1-9> - Уровень сжатия (только для Deflate)

Устанавливает уровень сжатия для Deflate алгоритма.

  • 1 - Быстрое сжатие (минимальное)
  • 5 - Среднее (по умолчанию)
  • 9 - Максимальное сжатие (медленнее)

Пример:

MariaARK.exe a archive.mark *.txt -mDEFL -l9

-p<пароль> - Пароль для шифрования

Устанавливает пароль для шифрования архива (AES-256).

Пример:

MariaARK.exe a archive.mark *.txt -p"мой_секретный_пароль" -mDEFL

Примечание: Пароль будет запрошен при извлечении, если не указан в командной строке.

-v<размер> - Многотомный архив

Создает многотомный архив с указанным размером тома.

Формат размера:

  • K - Килобайты (например, 100K)
  • M - Мегабайты (например, 100M)
  • G - Гигабайты (например, 1G)

Пример:

# Создать архив с томами по 100 МБ
MariaARK.exe a archive.mark *.txt -v100M -mDEFL

# Результат: archive.part1.mark, archive.part2.mark, ...

-s или --solid - Солидный архив

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

Пример:

MariaARK.exe a archive.mark *.txt -s -mDEFL

-r или --recursive - Рекурсивное архивирование

Рекурсивно добавляет все файлы из указанных каталогов и подкаталогов.

Пример:

MariaARK.exe a archive.mark folder -r -mDEFL

-x<маска> - Исключение файлов

Исключает файлы, соответствующие указанной маске.

Пример:

# Исключить временные файлы и логи
MariaARK.exe a archive.mark folder -r -x"*.tmp" -x"*.log" -mDEFL

-u или --update - Режим обновления

Обновляет только измененные файлы в существующем архиве. Файл считается измененным, если изменился его размер или дата модификации.

Пример:

# Создать архив
MariaARK.exe a archive.mark *.txt -mDEFL

# Обновить только измененные файлы
MariaARK.exe a archive.mark *.txt -u -mDEFL

-b или --backup - Резервная копия

Создает резервную копию (.bak) перед обновлением существующего архива.

Пример:

MariaARK.exe a archive.mark *.txt -u -b -mDEFL

-c<текст> - Комментарий к файлу

Добавляет комментарий к следующему файлу в списке.

Пример:

MariaARK.exe a archive.mark file1.txt -c"Важный файл" file2.txt -mDEFL

Примечание: В текущей версии комментарии к отдельным файлам поддерживаются на уровне API, но не полностью интегрированы в CLI.


🔧 Методы сжатия

STOR (Store) - Без сжатия

Просто копирует данные без сжатия. Самый быстрый метод, но не уменьшает размер.

Использование:

MariaARK.exe a archive.mark *.txt -mSTOR

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

DEFL (Deflate) - Рекомендуется

Стандартный алгоритм сжатия, используемый в ZIP. Хороший баланс между скоростью и степенью сжатия.

Использование:

# Средний уровень (по умолчанию)
MariaARK.exe a archive.mark *.txt -mDEFL

# Максимальное сжатие
MariaARK.exe a archive.mark *.txt -mDEFL -l9

Применение: Универсальный выбор для большинства случаев.

LZ77

Классический алгоритм Lempel-Ziv 1977. Использует скользящее окно 8KB.

Использование:

MariaARK.exe a archive.mark *.txt -mLZ77

Применение: Для текстовых файлов с повторяющимися паттернами.

LZSS

Lempel-Ziv-Storer-Szymanski. Улучшенная версия LZ77 с окном 4KB.

Использование:

MariaARK.exe a archive.mark *.txt -mLZSS

Применение: Для небольших файлов с повторяющимися данными.

LZW

Lempel-Ziv-Welch. Использует словарь для сжатия.

Использование:

MariaARK.exe a archive.mark *.txt -mLZW

Применение: Для файлов с повторяющимися последовательностями.

LZHF (LZ77 + Adaptive Huffman)

Комбинация LZ77 и адаптивного кодирования Хаффмана. Использует LZ77 для поиска повторений и адаптивное дерево Хаффмана для эффективного кодирования символов.

Использование:

MariaARK.exe a archive.mark *.txt -mLZHF

Применение: Для файлов с повторяющимися паттернами, где требуется лучшее сжатие чем у простого LZ77.


📝 Примеры использования

Пример 1: Базовое архивирование

# Создать архив с несколькими файлами
MariaARK.exe a documents.mark file1.txt file2.doc file3.pdf

# Просмотреть содержимое
MariaARK.exe l documents.mark

# Извлечь все файлы
MariaARK.exe x documents.mark C:\extracted

# Проверить целостность
MariaARK.exe t documents.mark

Пример 2: Сжатие с максимальным уровнем

# Создать архив с максимальным сжатием
MariaARK.exe a backup.mark C:\Documents\*.txt -mDEFL -l9

# Результат: максимально сжатый архив

Пример 3: Рекурсивное архивирование с исключениями

# Архивировать всю папку, исключая временные файлы
MariaARK.exe a project.mark C:\MyProject -r -x"*.tmp" -x"*.log" -x"*.bak" -mDEFL

Пример 4: Зашифрованный архив

# Создать зашифрованный архив
MariaARK.exe a secret.mark sensitive.txt -p"мой_пароль" -mDEFL

# Извлечь (будет запрошен пароль)
MariaARK.exe x secret.mark

Пример 5: Многотомный архив

# Создать архив с томами по 50 МБ
MariaARK.exe a large.mark C:\LargeFiles\*.* -v50M -mDEFL

# Результат: large.part1.mark, large.part2.mark, large.part3.mark, ...

Пример 6: Солидный архив

# Создать солидный архив для лучшего сжатия
MariaARK.exe a solid.mark *.txt -s -mDEFL -l9

Пример 7: Обновление архива

# Создать архив
MariaARK.exe a project.mark *.txt -mDEFL

# Изменить некоторые файлы...

# Обновить только измененные файлы
MariaARK.exe a project.mark *.txt -u -mDEFL

# С резервной копией
MariaARK.exe a project.mark *.txt -u -b -mDEFL

Пример 8: Удаление файлов из архива

# Удалить временные файлы
MariaARK.exe d archive.mark *.tmp

# Удалить конкретный файл
MariaARK.exe d archive.mark old_file.txt

Пример 9: Извлечение конкретных файлов

# Извлечь только .txt файлы
MariaARK.exe x archive.mark . *.txt

# Извлечь конкретные файлы
MariaARK.exe x archive.mark . file1.txt file2.txt

Пример 10: Комбинирование опций

# Полный пример со всеми опциями
MariaARK.exe a backup.mark C:\Data -r -mDEFL -l9 -s -p"пароль" -v100M -x"*.tmp" -b

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

Структура файла .mark

[Магическая сигнатура: "MARK" (4 байта)]
[Версия формата: UInt16 (2 байта, текущая версия 3)]
[Метаданные архива (версия 2+)]
  - Длина комментария: UInt16
  - Комментарий: UTF-8 строка
  - Дата создания: Int64 (ticks)
  - Версия создателя: UInt16 длины + UTF-8 строка
[Флаги (версия 3+): UInt16]
  - Бит 0: Зашифрован
  - Бит 1: Солидный архив
  - Бит 2: Многотомный
[Информация о шифровании (если зашифрован)]
  - Хеш пароля: 16 байт (первые 16 байт SHA256)
[Информация о томах (если многотомный)]
  - Размер тома: Int64
  - Номер текущего тома: UInt32
[Записи файлов]
  Для каждого файла:
    - Размер заголовка: UInt16
    - Метод сжатия: 4 байта ASCII
    - Размер оригинала: UInt64
    - Размер сжатых данных: UInt64
    - CRC32: UInt32
    - Дата/время: Int64 (ticks)
    - Атрибуты файла: UInt32
    - Длина имени файла: UInt16
    - Имя файла: UTF-8 строка
    - Длина комментария: UInt16 (версия 3+)
    - Комментарий: UTF-8 строка (версия 3+)
    - Флаг пароля файла: Byte (версия 3+)
    - Сжатые данные: переменной длины
[Маркер конца: 0x00 (1 байт)]

Версии формата

  • Версия 1: Базовый формат
  • Версия 2: Добавлены метаданные (комментарий, дата создания, версия)
  • Версия 3: Добавлены шифрование, многотомность, солидные архивы, комментарии к файлам

🔬 Технические детали

Алгоритмы сжатия

Deflate

  • Реализация: .NET Framework DeflateStream
  • Уровни сжатия: 1-9 (реализовано через размер буфера)
  • Рекомендуется для большинства случаев

LZ77

  • Размер окна: 8KB
  • Максимальная длина совпадения: 258 байт
  • Хорошо работает с текстовыми файлами

LZSS

  • Размер окна: 4KB
  • Максимальная длина совпадения: 18 байт
  • Оптимизирован для небольших файлов

LZW

  • Начальный размер словаря: 256 записей
  • Максимальный размер словаря: 4096 записей
  • Использует ByteSequence для ключей словаря

Шифрование

  • Алгоритм: AES-256
  • Режим: CBC (Cipher Block Chaining)
  • Заполнение: PKCS7
  • Вывод ключа: PBKDF2 с 10000 итерациями
  • Соль: 16 байт случайных данных (уникальна для каждого блока)

CRC32

Используется для проверки целостности данных. CRC32 вычисляется для оригинальных (несжатых) данных и проверяется при извлечении.

Прогресс-бар

Отображается для операций с файлами размером более 1MB:

  • Процент выполнения
  • Обработанный/общий размер в MB
  • Скорость в MB/s

⚠️ Известные ограничения

  1. Размер файла: Теоретически поддерживаются файлы до 2^64 байт, но рекомендуется не более 2GB из-за ограничений .NET Framework
  2. Длина имени файла: Максимум 4096 символов (для безопасности)
  3. Размер комментария: Максимум 65535 байт (64KB)
  4. Солидные архивы: Требуют распаковки всего блока для извлечения любого файла
  5. Многотомные архивы: При извлечении требуется наличие всех томов

📄 Лицензия

[Укажите лицензию проекта]


🤝 Вклад в проект

[Информация о том, как внести вклад]


📞 Поддержка

[Контактная информация или ссылки на issues]


📚 Дополнительные ресурсы


Версия документации: 3.0
Последнее обновление: 2024

About

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

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors