Невозможно использовать Quazip's Open (), чтобы добавить новый файл в Zip ArchiveC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Невозможно использовать Quazip's Open (), чтобы добавить новый файл в Zip Archive

Сообщение Anonymous »

Моя среда - Rocky Linux 9, под WSL2. Это означает, что последнее квазип, к которому я имею доступ, является 1.2 < /p>
Я пытаюсь сделать супер базовый пример, просто превращая папку в zip -файл. Тем не менее, я не могу скомпилировать его, потому что по какой -то причине мои призывы к Quazipfile :: open () не распознаются. Я могу открыть заголовок и увидеть его прямо там , так что я не уверен, в чем заключается проблема:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 

void MainWindow::myFunc() {
QuaZip zip("C:\\Users\\tyler.shellberg\\Downloads\\workingdir\\materials.zip");

if (!zip.open(QuaZip::mdCreate))
{
// Handle error: could not create zip file
return;
}

QString sourceFolderPath = "C:\\Users\\tyler.shellberg\\Downloads\\workingdir\\materials";

QDirIterator it(sourceFolderPath,
QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot,
QDirIterator::Subdirectories);

while (it.hasNext())
{
it.next();
QFileInfo fileInfo = it.fileInfo();
QString relativePath =
QDir(sourceFolderPath).relativeFilePath(fileInfo.absoluteFilePath());

if (fileInfo.isFile())
{
QuaZipFile zipFile(&zip);
QuaZipNewInfo newInfo(relativePath);

if (!zipFile.open(QIODevice::WriteOnly, newInfo))
{
// Handle error: could not open entry in zip
continue;
}

QFile sourceFile(fileInfo.absoluteFilePath());
if (sourceFile.open(QIODevice::ReadOnly))
{
zipFile.write(sourceFile.readAll());
sourceFile.close();
}
else
{
// Handle error: could not open source file
}
zipFile.close();
}
else if (fileInfo.isDir())
{
// Add directory entry (optional, but good for structure)
QuaZipFile zipFile(&zip);
// Add trailing slash for directory
QuaZipNewInfo newInfo(relativePath + "/");
if (!zipFile.open(QIODevice::WriteOnly, newInfo))
{
// Handle error
}
zipFile.close();
}
}
zip.close();
}
< /code>
Когда я смотрю в заголовок, Quazipfile :: open (), принимая в открытую моду, и Quazipnewinfo явно прямо здесь! (Остальные аргументы являются необязательными) < /p>
    bool open(OpenMode mode, const QuaZipNewInfo& info,
const char *password =nullptr, quint32 crc =0,
int method =Z_DEFLATED, int level =Z_DEFAULT_COMPRESSION, bool raw =false,
int windowBits =-MAX_WBITS, int memLevel =DEF_MEM_LEVEL, int strategy =Z_DEFAULT_STRATEGY);
< /code>
Попытка компилировать, я получаю: < /p>
undefined reference to `QuaZipFile::open(QFlags, QuaZipNewInfo const&, char const*, unsigned int, int, int, bool, int, int, int)'
collect2: error: ld returned 1 exit status
< /code>
Если я прокомментирую два вызова Open (), остальные могут скомпилировать просто хорошо. (Приведено в соответствующем заголовке, он выполняет Q_DECLARE_FLAGS (OPENMODE, OPENMODEFLAG) 
), если нет, я понятия не имею, откуда он будет.find_package(QuaZip5 REQUIRED)
< /code>
и < /p>
target_link_libraries(${EXECUTABLE_NAME} PRIVATE quazip1-qt5)
target_include_directories(${EXECUTABLE_NAME} PRIVATE ${QUAZIP_INCLUDE_DIRS})


Подробнее здесь: https://stackoverflow.com/questions/797 ... ip-archive
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»