我在 c/c++ 中使用 libarchive 来创建文件的 zip 存档,并且我正在尝试查找是否有一种好方法来查找文件中是否已经存在文件名(或者更确切地说是路径中的文件)。
目前,我唯一的方法是循环浏览所有标题并将文件名与我希望放入 zip 中的文件名进行比较,基于 libarchive 网站的示例代码:
struct mydata *mydata;
struct archive *a;
struct archive_entry *entry;
mydata = malloc(sizeof(struct mydata));
a = archive_read_new();
mydata->name = name;
mydata->fd = open(mydata->name, O_RDONLY); // Include O_BINARY on Windows
archive_read_support_compression_all(a);
archive_read_support_format_all(a);
archive_read_open(a, mydata, NULL, myread, myclose);
while (archive_read_next_header(a, &entry) == ARCHIVE_OK) {
printf("%s\n",archive_entry_pathname(entry));
}
archive_read_finish(a);
free(mydata);
该printf
函数已在我的代码中进行了编辑以进行比较。显然,随着 zip 文件变大并且要检查大量标头,这会产生相当大的开销。
这是最好的方法还是我错过了更简单的东西?