0

我需要将 *.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,然后 gzip 该 tarball。

如何使用 STL 或 Boost 库重写此函数?

我在使用 Boost 库方面非常缺乏经验,而且在 C++ 中的文件系统管理方面我完全无知。

4

1 回答 1

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

于 2013-06-15T21:23:24.030 回答