Трябва да архивирам *.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++.