C++ 如何在目录路径而不是文件列表上创建LibArchive归档?
我以前从未使用过LibArchive,我正试图使用它创建目录的.tar存档,因为它安装在我的远程计算实例上 LibArchive有一个示例,说明如何从文件的平面列表创建归档文件(如下所示)。但我找不到任何关于如何从目录路径实际创建存档的示例。在从同一网站“提取”的过程中,似乎所有内容都包含在“archive\u entry”结构中,但似乎没有用于创建的对应项C++ 如何在目录路径而不是文件列表上创建LibArchive归档?,c++,libarchive,C++,Libarchive,我以前从未使用过LibArchive,我正试图使用它创建目录的.tar存档,因为它安装在我的远程计算实例上 LibArchive有一个示例,说明如何从文件的平面列表创建归档文件(如下所示)。但我找不到任何关于如何从目录路径实际创建存档的示例。在从同一网站“提取”的过程中,似乎所有内容都包含在“archive\u entry”结构中,但似乎没有用于创建的对应项 void write_archive(const char *outname, const char **filename) { st
void
write_archive(const char *outname, const char **filename)
{
struct archive *a;
struct archive_entry *entry;
struct stat st;
char buff[8192];
int len;
int fd;
a = archive_write_new();
archive_write_add_filter_gzip(a);
archive_write_set_format_pax_restricted(a); // Note 1
archive_write_open_filename(a, outname);
while (*filename) {
stat(*filename, &st);
entry = archive_entry_new(); // Note 2
archive_entry_set_pathname(entry, *filename);
archive_entry_set_size(entry, st.st_size); // Note 3
archive_entry_set_filetype(entry, AE_IFREG);
archive_entry_set_perm(entry, 0644);
archive_write_header(a, entry);
fd = open(*filename, O_RDONLY);
len = read(fd, buff, sizeof(buff));
while ( len > 0 ) {
archive_write_data(a, buff, len);
len = read(fd, buff, sizeof(buff));
}
close(fd);
archive_entry_free(entry);
filename++;
}
archive_write_close(a); // Note 4
archive_write_free(a); // Note 5
}
libtarapi中的archive_read_disk_down函数允许您遍历目录。它应该在存档\写入\头(a,条目)之前调用;要在启动for循环之前使用此函数,需要调用struct archive*disk=archive\u read\u disk\u new(),以创建表示磁盘的存档。libtar api中的archive\u read\u disk\u down函数允许您遍历目录。它应该在存档\写入\头(a,条目)之前调用;要在启动for循环之前使用此函数,需要调用struct archive*disk=archive\u read\u disk\u new(),以创建表示磁盘的存档