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

2 篇文章 0 订阅
删除非空文件夹

在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/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值