我需要将* .cpp文件存档在gzip压缩包中的特定目录中。我需要在运行时发生这种情况,以便准确记录哪些代码(例如,哪些版本的源代码文件)从程序中产生了一组特定的结果。
所以,我写了以下函数。它通常可以正常工作,但已经过去搞过一次或两次。我不记得究竟发生了什么,但我记得我认为这是因为使用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文件的tarball和tarball的gzip。
如何使用STL或Boost库重写此功能?
我对使用Boost库非常缺乏经验,而且在c ++文件系统管理方面我完全不了解。
答案 0 :(得分: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);
如果你可以使用boost :: iostreams,那么还有内置的gzip功能,即boost::iostreams::gzip