2013-06-15 1 views
0

Мне нужно архивировать * .cpp файлы в определенном каталоге внутри gzipped tarball. Мне нужно, чтобы это происходило во время выполнения в качестве средства документирования того, какой код (например, какие версии файлов исходного кода) вывел определенный набор результатов из программы.Перезапись этой простой функции с использованием C++ STL/Boost вместо вызовов system()?

Итак, я написал следующую функцию. Обычно он работает нормально, но у него есть ввернутый один или два раза в прошлом. Я не могу вспомнить, что произошло, точно, но я помню, что это связано с использованием system() вместо фактического удаления и архивирования файлов в программе на C++.

void saveSourceCode_TarGZ(string destinationFile) { 
    system(("rm -f " + destinationFile).c_str()); 
    system(("rm -f " + destinationFile + ".gz").c_str()); 

    system(("tar -cvf " + destinationFile + " ./*.cpp").c_str()); 
    system(("gzip " + destinationFile).c_str()); 
} 

Первые две строки в указанном выше функция просто удалить уже существующий файл с таким же именем, как архив я пытаюсь создать (destinationFile), если оно существует. Последние две строки, соответственно, создают tarball всех файлов .cpp в текущем рабочем каталоге и gzip для этого tarball.

Как я могу переписать эту функцию с помощью библиотек STL или Boost?

Я очень неопытен в использовании библиотек Boost, и я являюсь полным невежеством, когда дело касается управления файловой системой в C++.

ответ

3

В STL нет функций для сжатия и распаковки файлов (в соответствии с некоторой схемой сжатия).

Это небольшая библиотека под названием lz4 (link), которая должна удовлетворять ваши потребности. Отрывок взят из lz4.h:

//**************************** 
// Simple Functions 
//**************************** 

int LZ4_compress  (const char* source, char* dest, int inputSize); 
int LZ4_decompress_safe (const char* source, char* dest, int inputSize, int maxOutputSize); 

Там же встроенные функции GZIP, если вы можете использовать повышение :: iostreams, а именно boost::iostreams::gzip

 Смежные вопросы

  • Нет связанных вопросов^_^