Как проверить, сжат ли файл?

0

Мне нужно каким-то образом определить, сжат ли файл в каком-то расширении ex: (rar, tar, tar.gz и т.д.), Он использует языки C/C++ в Linux-системах. Я прочитал что-то о stat и S_IFCMP, но я не могу использовать его в linux, так что вы можете помочь мне с какой-то альтернативой?

  • 0
    S_IFCMP не сообщает вам, сжат ли файл, речь идет о сжатой файловой системе, что является совсем другим случаем.
  • 6
    Вы можете использовать команду file или создать свою собственную. Обычно вам нужно проверить только первые несколько байтов на libmagic, или вы можете доверять расширению ... Что не очень безопасно.
Теги:
stat

3 ответа

7
Лучший ответ

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

Вы можете найти некоторые из них здесь.

В вызове stat не сообщается о сжатии отдельных файлов, так как этот флаг означает, что файловая система сжимается.

2

Каждый формат файла имеет свою собственную подпись. Существует не общий способ, который можно применять ко всем сжатым форматам файлов, таким как RAR, TAR, TAR.GZ. Подпись для различных форматов файлов доступна по адресу: http://www.garykessler.net/library/file_sigs.html.

0

Вот небольшой, простой пример того, что вы могли бы сделать. Вы просто проверяете строку для пути к файлу и видите для нее последние пару символов.

//You could set this to anything
std::string filePath = "hello.rar";

if ((filePath.back() - 2 == "r") && (filePath.back() - 1 == "a") && (filePath.back() == "r"))
    std::cout << "The file is a .rar" << std::endl;

Надеюсь, это поможет!

(PS, если вы ищете безопасный способ проверки, это определенно не тот путь, который вы хотите предпринять).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню