Пренаписване на тази проста функция с помощта на c++ STL/Boost вместо системни () извиквания?

Трябва да архивирам *.cpp файловете в определена директория в gzipped tarball. Имам нужда това да се случи по време на изпълнение като средство за документиране на точно какъв код (напр. кои версии на кои файлове с изходен код) са произвели определен набор от резултати от програмата.

И така, написах следната функция. Обикновено работи добре, но се е прецаквал веднъж или два пъти в миналото. Не мога да си спомня какво точно се случи, но си спомням, че си помислих, че се дължи на използването на 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), ако съществува. Последните два реда, съответно, създават архив на всички .cpp файлове в текущата работна директория и gzip този архив.

Как мога да пренапиша тази функция с помощта на библиотеките STL или Boost?

Аз съм много неопитен в използването на библиотеките Boost и съм пълен невежа, когато става въпрос за управление на файловата система в c++.


person synaptik    schedule 15.06.2013    source източник


Отговори (1)


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

Въпреки това има малка библиотека, наречена lz4 (връзка), която трябва да задоволи вашите нужди. Фрагмент, взет от 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 функционалност, ако можете да използвате boost::iostreams, а именно boost::iostreams::gzip

person rwols    schedule 15.06.2013