删除非空文件夹
复制文件夹
转自: 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/
在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/