Example #1
0
bool decompressDir(const QString& inFile, const QString& targetDir, bool isUtf8)
{
	QString path = targetDir;
	if (!path.endsWith("/") && !path.endsWith("\\"))
		path += "/";
	QDir dir(path);
	if (!dir.exists())
		dir.mkpath(targetDir);
	//set gbk default
	if (!isUtf8)
		QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
	QuaZip archive(inFile);
	//archive.setFileNameCodec("GBK");
	if (!archive.open(QuaZip::mdUnzip))
	{
		QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
		return false;
	}
	for (bool f = archive.goToFirstFile(); f; f = archive.goToNextFile())
	{
		QString filePath = archive.getCurrentFileName();
		QuaZipFile zFile(archive.getZipName(), filePath);
		zFile.open(QIODevice::ReadOnly);
		QByteArray ba = zFile.readAll();
		zFile.close();
		if (filePath.endsWith("/"))
		{
			dir.mkpath(filePath);
		}
		else
		{
			QString utf8FileName = path + filePath;
			QFile dstFile(utf8FileName);
			if (!dstFile.open(QIODevice::WriteOnly))
			{
				QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
				return false;
			}
			dstFile.write(ba);
			dstFile.close();
		}
	}
	//restore QTextCodec
	QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
	return true;
}
Example #2
0
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QuaZip archive("Desktop.zip");
    if (!archive.open(QuaZip::mdUnzip))
        return false;

    QString out_dir = "./zip";
    QString path = out_dir;
    if (!path.endsWith("/") && !out_dir.endsWith("\\"))
        path += "/";

    QDir dir(out_dir);
    if (!dir.exists())
        dir.mkpath(".");

    for( bool f = archive.goToFirstFile(); f; f = archive.goToNextFile() )
    {
        QString filePath = archive.getCurrentFileName();
        QuaZipFile zFile(archive.getZipName(), filePath);
        zFile.open(QIODevice::ReadOnly );
        QByteArray ba = zFile.readAll();
        qDebug() << ba.size()/1024 <<"Byte\t" << "--------\t" << filePath;
        zFile.close();

        if (filePath.endsWith("/"))
        {
            dir.mkpath(filePath);
        }
        else
        {
            QFile dstFile(path + filePath);
            if (!dstFile.open(QIODevice::WriteOnly))
                return false;
            dstFile.write(ba);
            dstFile.close();
        }
    }
    if(archive.getZipError()==UNZ_OK) {
           // ok, there was no error
        qDebug() << "ok";
    }
    return a.exec();
}
bool VertexElementCallBack::saveFile(const std::string & fileName, const std::string &) const {
#ifdef QT_CORE_LIB
	QuaZip zip(QString::fromLocal8Bit(fileName.data()));
	if (zip.open(QuaZip::Mode::mdCreate)==false) {
		return false;
	}

	{
		QuaZipFile zFile( &zip );
		QuaZipNewInfo info("info.txt" );
		if ( zFile.open(QIODevice::WriteOnly,info) ) {
			QByteArray all_info(R"(<root>
<vertexFile>vertex</vertexFile>
<vertexIndex>index</vertexIndex>
<vertexSize>)");
			all_info += QString("%1").arg(points.size()) ;
			all_info += "</vertexSize>\n";

			all_info += "<indexSize>";
			all_info += QString("%1").arg(triangles.size()*3);
			all_info += "</indexSize>\n";

			all_info += "<xMax>";
			all_info += QString("%1").arg(xMax);
			all_info += "</xMax>\n";

			all_info += "<yMax>";
			all_info += QString("%1").arg(yMax);
			all_info += "</yMax>\n";

			all_info += "<zMax>";
			all_info += QString("%1").arg(zMax);
			all_info += "</zMax>\n";

			all_info += "<yMin>";
			all_info += QString("%1").arg(yMin);
			all_info += "</yMin>\n";

			all_info += "<zMin>";
			all_info += QString("%1").arg(zMin);
			all_info += "</zMin>\n";

			all_info += "<xMin>";
			all_info += QString("%1").arg(xMin);
			all_info += "</xMin>\n";

			all_info += "</root>";
			zFile.write( all_info );
		}
		else {
			return false;
		}
	}

	{
		QuaZipFile zFile(&zip);
		QuaZipNewInfo info("vertex");
		if (zFile.open(QIODevice::WriteOnly, info)) {
			QDataStream dStream( &zFile );
			dStream.setVersion(QDataStream::Version::Qt_5_5);
			for ( const auto & i:points ) {
				dStream << i.x;
				dStream << i.y;
				dStream << i.z;
			}
		}
		else {
			return false;
		}
	}

	{
		QuaZipFile zFile(&zip);
		QuaZipNewInfo info("index");
		if (zFile.open(QIODevice::WriteOnly, info)) {
			QDataStream dStream(&zFile);
			dStream.setVersion(QDataStream::Version::Qt_5_5);
			auto ri = triangles.begin();
			auto re = triangles.end();
			for (;ri!=re;++ri) {
				dStream << ri->first;
				dStream << ri->second;
				dStream << ri->third;
			}
		}
		else {
			return false;
		}

		
}
	return true;
	 
#else
	return false;
#endif
}/*saveFile**********************************/
bool VertexElementCallBack::loadFile(const std::string & fileName) {
	//QXmlStreamReader
#ifdef QT_CORE_LIB
	QuaZip zip( QString::fromLocal8Bit(fileName.data()) );
	if (zip.open(QuaZip::Mode::mdUnzip) == false) {
		return false;
	}
	std::map<QString, QString> infoFile;
	{
		if (zip.setCurrentFile("info.txt")==false) {
			return false;
		}
		QuaZipFile zFile(&zip);
		if (zFile.open( QIODevice::ReadOnly | QFile::Text)==false) {
			return false;
		}
		QXmlStreamReader reader( &zFile );
		bool has__error = reader.hasError();
		bool at__end = reader.atEnd();
		while ( (!has__error)&&(!at__end) ){
			const auto item_type = reader.readNext();
			if(item_type== QXmlStreamReader::StartElement){
				const QString name__ = reader.name().toString() ;
				if (name__ == "root") { continue; }
				const QString value__ = reader.readElementText();
				infoFile[name__] = value__;
			}
			has__error = reader.hasError();
			at__end = reader.atEnd();
		}//~while
	}

	const auto & file_info = infoFile;
	const auto end_info = file_info.end();

	{//顶点索引空间准备
		auto i = file_info.find("indexSize");
		if (i == end_info) { return false; }
		auto index__size = i->second.toULong();
		this->triangles.clear();
		this->triangles.reserve( index__size/3 );
	}

	{//顶点空间准备
		auto i = file_info.find("vertexSize");
		if (i == end_info) { return false; }
		auto vertex__size = i->second.toULong();
		this->points.clear();
		this->points.reserve(vertex__size);
	}

	{ 
		auto i = file_info.find("zMax");
		if (i == end_info) { return false; }
		zMax = i->second.toFloat();
	}

	{
		auto i = file_info.find("zMin");
		if (i == end_info) { return false; }
		zMin = i->second.toFloat();
	}

	{
		auto i = file_info.find("xMax");
		if (i == end_info) { return false; }
		xMax = i->second.toFloat();
	}

	{
		auto i = file_info.find("xMin");
		if (i == end_info) { return false; }
		xMin = i->second.toFloat();
	}

	{
		auto i = file_info.find("yMax");
		if (i == end_info) { return false; }
		yMax = i->second.toFloat();
	}

	{
		auto i = file_info.find("yMin");
		if (i == end_info) { return false; }
		yMin = i->second.toFloat();
	}

	{//读取索引
		auto i = file_info.find("vertexIndex");
		if (i == end_info) { return false; }
		if (zip.setCurrentFile(i->second) == false) {
			return false;
		}
		QuaZipFile zFile(&zip);
		if (zFile.open(QIODevice::ReadOnly  ) == false) {
			return false;
		}
		QDataStream dStream(&zFile);
		dStream.setVersion(QDataStream::Version::Qt_5_5);
		Face face;
		while ( !dStream.atEnd() ){
			dStream >> face.first;
			dStream >> face.second;
			dStream >> face.third;
			triangles.push_back(face);
		}
	}

	{//读顶点
		auto i = file_info.find("vertexFile");
		if (i == end_info) { return false; }
		if (zip.setCurrentFile(i->second) == false) {
			return false;
		}
		QuaZipFile zFile(&zip);
		if (zFile.open(QIODevice::ReadOnly) == false) {
			return false;
		}
		QDataStream dStream(&zFile);
		dStream.setVersion(QDataStream::Version::Qt_5_5);
		gl::Point3 point;
		while (!dStream.atEnd()) {
			dStream >> point.x;
			dStream >> point.y;
			dStream >> point.z;
			points.push_back(point);
		}
	}

	return true;
#else
	return false;
#endif

}//loadFile//