使用c ++ STL / Boost而不是system()调用重写这个简单的函数?

时间:2013-06-15 20:56:56

标签: c++ boost gzip tar

我需要将* .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 ++文件系统管理方面我完全不了解。

1 个答案:

答案 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