OK * Estrae il file fileName, contenuto nell'oggetto zip, con il nome fileDest. * Se la funzione fallisce restituisce false e cancella il file che si e tentato di estrarre. * * La funzione fallisce se: * * zip==NULL; * * l'oggetto zip e stato aperto in una modalita non compatibile con l'estrazione di file; * * non e possibile aprire il file all'interno dell'oggetto zip; * * non e p
| 219 | * (1): prima di uscire dalla funzione cancella il file estratto. |
| 220 | */ |
| 221 | bool JlCompress::extractFile(QuaZip* zip, QString fileName, QString fileDest) { |
| 222 | // zip: oggetto dove aggiungere il file |
| 223 | // filename: nome del file reale |
| 224 | // fileincompress: nome del file all'interno del file compresso |
| 225 | |
| 226 | // Controllo l'apertura dello zip |
| 227 | if (!zip) return false; |
| 228 | if (zip->getMode()!=QuaZip::mdUnzip) return false; |
| 229 | |
| 230 | // Apro il file compresso |
| 231 | zip->setCurrentFile(fileName); |
| 232 | QuaZipFile inFile(zip); |
| 233 | if(!inFile.open(QIODevice::ReadOnly) || inFile.getZipError()!=UNZ_OK) return false; |
| 234 | // |
| 235 | int uncompressedSize = inFile.usize(); |
| 236 | |
| 237 | // Controllo esistenza cartella file risultato |
| 238 | QDir().mkpath(QFileInfo(fileDest).absolutePath()); |
| 239 | |
| 240 | // Apro il file risultato |
| 241 | if (QFile::exists(fileDest)) |
| 242 | { |
| 243 | qDebug() << "delete exists file."; |
| 244 | QFile::remove(fileDest); |
| 245 | } |
| 246 | QSaveFile outFile; |
| 247 | outFile.setFileName(fileDest); |
| 248 | if(!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { |
| 249 | |
| 250 | outFile.setPermissions(QFile::ReadOwner |
| 251 | | QFile::WriteOwner |
| 252 | | QFile::ReadUser |
| 253 | | QFile::WriteUser |
| 254 | | QFile::ReadGroup |
| 255 | | QFile::ReadOther |
| 256 | ); |
| 257 | // |
| 258 | if (!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) |
| 259 | return false; |
| 260 | } |
| 261 | |
| 262 | // Copio i dati |
| 263 | if (!copyData(inFile, outFile) || inFile.getZipError()!=UNZ_OK) { |
| 264 | removeFile(QStringList(fileDest)); |
| 265 | return false; |
| 266 | } |
| 267 | |
| 268 | // Chiudo i file |
| 269 | inFile.close(); |
| 270 | if (inFile.getZipError()!=UNZ_OK) { |
| 271 | removeFile(QStringList(fileDest)); |
| 272 | return false; |
| 273 | } |
| 274 | if (!outFile.commit()) |
| 275 | { |
| 276 | qDebug() << "failed to save zip file: " << fileDest; |
| 277 | return false; |
| 278 | } |
no test coverage detected