QT复制文件夹、删除非空目录

来源:互联网 发布:淘宝如何批量发货 编辑:程序博客网 时间:2024/05/02 04:38
删除非空文件夹

在windows测试,避开快捷方式(.lnk)问题,支持属性为隐藏或只读的文件,其它未测试

bool Global::deleteDir(const QString dirName) {QDir directory(dirName); if (!directory.exists()) {return true;} QStringList files = directory.entryList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);  QList<QString>::iterator f = files.begin(); bool error = false; for (; f != files.end(); ++f) {QString filePath = QDir::convertSeparators(directory.path() + '/' + (*f));QFileInfo fi(filePath);if (fi.isFile() || fi.isSymLink()){QFile::setPermissions(filePath, QFile::WriteOwner);if (!QFile::remove(filePath)) {DBG(qDebug() << "Global::deleteDir 1" << filePath << "faild");error = true;}}else if (fi.isDir()){if (!deleteDir(filePath));{error = true;}}} if(!directory.rmdir(QDir::convertSeparators(directory.path()))) {DBG(qDebug() << "Global::deleteDir 3" << directory.path()  << "faild");error = true;} return !error; }

复制文件夹

bool copyDir(const QString source, const QString destination, const bool override) { QDir directory(source);bool error = false; if (!directory.exists()) {return false;}  QStringList files = directory.entryList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);  QList<QString>::iterator f = files.begin();  for (; f != files.end(); ++f) {QString filePath = QDir::convertSeparators(directory.path() + '/' + (*f));QString dPath = destination + "/" + directory.relativeFilePath(filePath);QFileInfo fi(filePath);if (fi.isFile() || fi.isSymLink()){if (override){QFile::setPermissions(dPath, QFile::WriteOwner);}QFile::copy(filePath, dPath);  }else if (fi.isDir()){ QDir ddir(dPath);ddir.mkpath(dPath);if (!copyDir(filePath, dPath, override)){error = true;}}  }  return !error;}

转自:http://blog.langisle.com/2010/12/21/qt%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6%E5%A4%B9%E5%88%A0%E9%99%A4%E9%9D%9E%E7%A9%BA%E7%9B%AE%E5%BD%95/