Skip to content

samukhin/rarpy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 

Repository files navigation

RAR Архиватор

Простой архиватор RAR 5.0, реализованный на Python 3.x. Создаёт архивы в режиме store (без сжатия). Архивы совместимы с официальным unrar 5.x и выше.

Особенности

  • Создаёт архивы RAR 5.0
  • Только режим store (без сжатия)
  • Поддержка добавления файлов и папок
  • Совместим с официальным unrar
  • Улучшенная обработка ошибок с кастомными исключениями

Юридическая безопасность

Реализация использует только режим store и не реализует патентованные алгоритмы RAR 5, такие как RangeCoder или специфические улучшения LZ-77. Проект разработан для юридической безопасности и не нарушает патенты.

Зависимости

  • Python 3.10+ (стандартная библиотека: struct, pathlib, zlib, os, sys, logging)
  • cryptography (для шифрования: pip install cryptography)

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

Командная строка:

python rar.py a archive.rar file1.txt folder/

Программно:

from rar import create_rar
import pathlib

create_rar(pathlib.Path("archive.rar"), [pathlib.Path("file1.txt"), pathlib.Path("folder/")])

Примеры:

  • Создание архива с файлами: python rar.py a myarchive.rar file1.txt file2.txt
  • Добавление папки: python rar.py a myarchive.rar myfolder/
  • С шифрованием: python rar.py a myarchive.rar file.txt --password mypass
  • С замером времени: python rar.py a myarchive.rar largefile.dat --verbose

Performance

  • Для больших файлов используйте --verbose для вывода времени выполнения.
  • Режим store не сжимает данные, поэтому размер архива = сумме размеров файлов.
  • Оптимизирован для стандартных случаев; для >1GB файлов рассмотрите буферное чтение (не реализовано).

Тестирование

  1. Создайте архив: python rar.py a test.rar file1.txt folder/
  2. Распакуйте: unrar x test.rar
  3. Сравните контрольные суммы оригинальных и распакованных файлов

Обработка ошибок

  • InvalidPathError: Недействительные пути.
  • FileReadError: Ошибки чтения файлов.
  • RarCreationError: Ошибки создания архива.
  • Логирование ошибок в stderr.

Troubleshooting

  • Архив не распаковывается? Убедитесь, что unrar версии 5.x или выше установлен. Проверьте совместимость ОС.
  • Ошибка "Путь не существует"? Проверьте, что файлы/директории существуют, доступны и не повреждены.
  • Долгое создание архива? Для больших файлов используйте --verbose для отслеживания прогресса. Избегайте добавления тысяч файлов одновременно.
  • Подозрительные пути в логах? Это предупреждения о path traversal (пути вне текущей директории). Проверьте входные аргументы — архиватор логирует, но продолжает работу.
  • Ошибка "Неожиданная ошибка"? Проверьте логи stderr. Возможно, проблема с правами доступа или повреждёнными файлами.

FAQ

  • Можно ли сжимать файлы? Нет, только режим store (без сжатия) для юридической безопасности.
  • Поддерживает ли пароли? Да, шифрование AES-256 с --password.
  • Как распаковать архив? Используйте официальный unrar: unrar x archive.rar (запросит пароль если зашифрован).
  • Безопасно ли использовать? Да, логирует подозрительные пути. Шифрование защищает данные.
  • Как добавить unit-тесты? Создайте test_rar.py с pytest для функций вроде encode_vint.

Security Notes

  • Архиватор логирует попытки path traversal (выход за пределы текущей директории) для безопасности.
  • Не используйте с непроверенными входными данными.
  • RAR 5.0 store mode не шифрует данные — для чувствительных файлов рассмотрите шифрование.

Contributing

  • Для улучшений: создайте issue или PR на GitHub.
  • Добавьте unit-тесты для новых функций.
  • Соблюдайте PEP8 и документируйте изменения.

Лицензия

MIT License. Проект распространяется свободно, без гарантий.

Контакты

Для вопросов или вклада: создайте issue на GitHub.

About

Свободный архиватор RAR на языке Python

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages