Я пытаюсь сделать супер базовый пример, просто превращая папку в 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) < /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