gpt4 book ai didi

c++ - 使用 libarchive 重命名存档中的非空目录

转载 作者:行者123 更新时间:2023-11-28 06:41:06 30 4
gpt4 key购买 nike

我正在尝试使用 libarchive 库重命名存档的条目。特别是我正在使用函数 archive_entry_set_pathname

文件和空目录被正确重命名,但不幸的是,如果目录不为空,这将不起作用:不是重命名,而是创建一个具有新名称的新目录作为目标目录,具有旧名称。

相关代码片段:

...
while (archive_read_next_header(inputArchive, &entry) == ARCHIVE_OK) {
if (file == QFile::decodeName(archive_entry_pathname(entry))) {
// FIXME: not working with non-empty directories
archive_entry_set_pathname(entry, QFile::encodeName(newPath));
}

int header_response;
if ((header_response = archive_write_header(outputArchive, entry)) == ARCHIVE_OK) {
... // write the (new) outputArchive on disk
}
}

非空目录有什么问题?

最佳答案

在存档中,文件以其相对于存档根目录的完整路径名存储。您的代码仅匹配目录条目,您还需要匹配该目录下的所有条目并重命名它们。我不是 Qt 专家,也没有尝试过这段代码,但你会明白的。

QStringLiteral oldPath("foo/");
QStringLiteral newPath("bar/");
while (archive_read_next_header(inputArchive, &entry) == ARCHIVE_OK) {
QString arEntryPath = QFile::decodeName(archive_entry_pathname(entry));
if(arEntryPath.startsWith(oldPath) {
arEntryPath.replace(0, oldPath.length(), newPath);
archive_entry_set_pathname(entry, QFile::encodeName(arEntryPath));
}

int header_response;
if ((header_response = archive_write_header(outputArchive, entry)) == ARCHIVE_OK) {
... // write the (new) outputArchive on disk
}
}

关于c++ - 使用 libarchive 重命名存档中的非空目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25934657/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com