MUtilities development repository
修订版 | d0a824950818b6d86abc9c4fef72f9c866cebaf9 (tree) |
---|---|
时间 | 2018-04-10 05:18:39 |
作者 | ![]() |
Commiter | LoRd_MuldeR |
Some improvements to remove_file() and remove_directory() functions.
@@ -398,58 +398,39 @@ static const QFile::Permissions FILE_PERMISSIONS_NONE = QFile::ReadOther | QFile | ||
398 | 398 | bool MUtils::remove_file(const QString &fileName) |
399 | 399 | { |
400 | 400 | QFileInfo fileInfo(fileName); |
401 | - if(!(fileInfo.exists() && fileInfo.isFile())) | |
402 | - { | |
403 | - return true; | |
404 | - } | |
405 | 401 | |
406 | - for(int i = 0; i < 32; i++) | |
402 | + for(size_t round = 0; round < 13; ++round) | |
407 | 403 | { |
408 | - QFile file(fileName); | |
409 | - file.setPermissions(FILE_PERMISSIONS_NONE); | |
410 | - if((!(fileInfo.exists() && fileInfo.isFile())) || file.remove()) | |
404 | + if (round > 0) | |
411 | 405 | { |
412 | - return true; | |
406 | + MUtils::OS::sleep_ms(round); | |
407 | + fileInfo.refresh(); | |
413 | 408 | } |
414 | - MUtils::OS::sleep_ms(1); | |
415 | - fileInfo.refresh(); | |
416 | - } | |
417 | - | |
418 | - qWarning("Could not delete \"%s\"", MUTILS_UTF8(fileName)); | |
419 | - return false; | |
420 | -} | |
421 | - | |
422 | -static bool remove_directory_helper(const QDir &folder) | |
423 | -{ | |
424 | - if(!folder.exists()) | |
425 | - { | |
426 | - return true; | |
427 | - } | |
428 | - const QString dirName = folder.dirName(); | |
429 | - if(!dirName.isEmpty()) | |
430 | - { | |
431 | - QDir parent(folder); | |
432 | - if(parent.cdUp()) | |
409 | + if (fileInfo.exists()) | |
433 | 410 | { |
434 | - QFile::setPermissions(folder.absolutePath(), FILE_PERMISSIONS_NONE); | |
435 | - if(parent.rmdir(dirName)) | |
411 | + QFile file(fileName); | |
412 | + if (round > 0) | |
436 | 413 | { |
437 | - return true; | |
414 | + file.setPermissions(FILE_PERMISSIONS_NONE); | |
438 | 415 | } |
416 | + file.remove(); | |
417 | + fileInfo.refresh(); | |
418 | + } | |
419 | + if (!fileInfo.exists()) | |
420 | + { | |
421 | + return true; /*success*/ | |
439 | 422 | } |
440 | 423 | } |
424 | + | |
425 | + qWarning("Could not delete \"%s\"", MUTILS_UTF8(fileName)); | |
441 | 426 | return false; |
442 | 427 | } |
443 | 428 | |
444 | 429 | bool MUtils::remove_directory(const QString &folderPath, const bool &recursive) |
445 | 430 | { |
446 | - QDir folder(folderPath); | |
447 | - if(!folder.exists()) | |
448 | - { | |
449 | - return true; | |
450 | - } | |
431 | + const QDir folder(folderPath); | |
451 | 432 | |
452 | - if(recursive) | |
433 | + if(recursive && folder.exists()) | |
453 | 434 | { |
454 | 435 | const QFileInfoList entryList = folder.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden); |
455 | 436 | for(QFileInfoList::ConstIterator iter = entryList.constBegin(); iter != entryList.constEnd(); iter++) |
@@ -458,21 +439,37 @@ bool MUtils::remove_directory(const QString &folderPath, const bool &recursive) | ||
458 | 439 | { |
459 | 440 | remove_directory(iter->canonicalFilePath(), true); |
460 | 441 | } |
461 | - else if(iter->isFile()) | |
442 | + else | |
462 | 443 | { |
463 | 444 | remove_file(iter->canonicalFilePath()); |
464 | 445 | } |
465 | 446 | } |
466 | 447 | } |
467 | 448 | |
468 | - for(int i = 0; i < 32; i++) | |
449 | + for(size_t round = 0; round < 13; ++round) | |
469 | 450 | { |
470 | - if(remove_directory_helper(folder)) | |
451 | + if(round > 0) | |
471 | 452 | { |
472 | - return true; | |
453 | + MUtils::OS::sleep_ms(round); | |
454 | + folder.refresh(); | |
455 | + } | |
456 | + if (folder.exists()) | |
457 | + { | |
458 | + QDir parent = folder; | |
459 | + if (parent.cdUp()) | |
460 | + { | |
461 | + if (round > 0) | |
462 | + { | |
463 | + QFile::setPermissions(folder.absolutePath(), FILE_PERMISSIONS_NONE); | |
464 | + } | |
465 | + parent.rmdir(folder.dirName()); | |
466 | + folder.refresh(); | |
467 | + } | |
468 | + } | |
469 | + if (!folder.exists()) | |
470 | + { | |
471 | + return true; /*success*/ | |
473 | 472 | } |
474 | - MUtils::OS::sleep_ms(1); | |
475 | - folder.refresh(); | |
476 | 473 | } |
477 | 474 | |
478 | 475 | qWarning("Could not rmdir \"%s\"", MUTILS_UTF8(folderPath)); |