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

Rewriting this simple function using c++ STL/Boost instead of system() calls?

我需要将*.cpp文件归档到gzip tarball中的特定目录中。我需要在运行时发生这种情况,作为精确记录哪些代码(例如哪些版本的源代码文件)从程序中生成特定结果集的一种方法。

所以,我编写了以下函数。它通常工作得很好,但在过去它曾出过一两次差错。我想不起来到底发生了什么,但我记得这是由于使用EDCOX1第0条而不是在C++程序中实际进行文件删除和归档。

1
2
3
4
5
6
7
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++中使用文件系统管理时,我是一个完全无知的人。


STL中没有压缩和解压缩文件的功能(根据某些压缩方案)。

也就是说,有一个叫lz4(link)的小图书馆,可以满足你的需求。从lz4.h中提取的代码段:

1
2
3
4
5
6
//****************************
// 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,即boost::iostreams::gzip,那么还有内置的gzip功能。