Как я архивирую каталог файлов с помощью C++?

Вы можете взять страницу из того, как Argu обрабатывает аргументы командной строки, и сделать что-то вроде этого:

type OfferingFlags =
    | Waved
    | RequiresSalt
    | OfferedWithFrankincense
    | ShouldBeBroughtToCorner
    | EntirelyBurnt

Тогда тип MealOffering может выглядеть так: [1116 ]

type MealOffering = 
    {
        Offering: Offering
        Flour: AccompanyingMealOfferings
        Flags: OfferingFlags list
    }

Флаг , отсутствующий в списке , представляет значение false, а флаг, представленный в списке, представляет значение true для этого флага. То есть, чтобы проверить, требует ли приношение соли, вы должны сделать:

offering.Flags |> List.contains RequiresSalt

И список сопутствующих приношений пищи (для которых требуется соль, полностью сожжен, но не ] нужно помахать, подвести к углу или предложить с ладаном), будет выглядеть так:

[ RequiresSalt; EntirelyBurnt ]

Преимущество этого метода моделирования заключается в том, что независимо от того, сколько у вас флагов, вы можете добавить новый флаг без необходимости редактирования типа MealOffering. Это также может быть недостатком, потому что, когда вы моделируете каждый флаг отдельно как bool, каждый раз, когда вы добавляете новый флаг, компилятор заставляет вас рассматривать его везде - тогда как, моделируя его как список значений DU, компилятор не заставит вас проверять новый флаг RequiresSomethingElse в тех местах, где это нужно сделать. НО, если вы думаете, что вы закончили добавление новых флагов, или если любой новый флаг, который вы добавляете, должен также по умолчанию установить значение false, то подход OfferingFlags list, как правило, является хорошим.

8
задан martian 13 February 2009 в 18:48
поделиться

4 ответа

Я нашел следующие две библиотеки:

  • ZipIOS ++. Кажется, "чистый" C++. Они не перечисляют Windows явно как поддерживаемую платформу. Таким образом, я думаю, что необходимо попытать счастья сами.
  • QuaZIP. На основе Qt4. На самом деле хорошие взгляды. Они перечисляют Windows явно (Используя mingw). По-видимому, это - обертка C++ для [этой] библиотеки.

А-ч, и конечно, я разорвал те сайты от этого спокойного вопроса о Mailinglist об Архивировании/Разархивации каталогов :)

9
ответ дан 5 December 2019 в 17:42
поделиться
1
ответ дан 5 December 2019 в 17:42
поделиться

Просто для записи ...

Сегодня мне нужно было сделать что-то очень похожее в Visual C ++. (Хотя хотелось сохранить возможность компилировать проект на других платформах, однако предпочитал не принимать Qt только для этой цели.)

Завершено использованием библиотеки Minizip . Он написан на простом C, но разработка простой оболочки C ++ вокруг него была легкой задачей, и конечный результат отлично работает, по крайней мере, для моих целей.

1
ответ дан 5 December 2019 в 17:42
поделиться
system("zip myarchive.zip *");
-1
ответ дан 5 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: