对文件、文件夹的几种遍历操作

遍历,查询文件夹下是否存在指定的文件:

	bool IsExistFileInDir( const QString strDir,const QString strFileName )
	{
		// 遍历文件夹判断是否存在指定的文件
		//判断路径是否存在
		QDir dir(strDir);
		if(!dir.exists())
		{
			return false;
		}
		dir.setFilter(QDir::Files | QDir::NoSymLinks);
		QFileInfoList list = dir.entryInfoList();

		int file_count = list.count();
		if(file_count <= 0)
		{
			return false;
		}

		for(int i=0; i < file_count; i++)
		{
			QFileInfo file_info = list.at(i);
			QString filename = file_info.filePath();

			if (filename == strFileName)
			{
				return true;
			}

		}

		return false;
	}


遍历删除文件夹:

	void RemoveFilesInDir( const QString &path )
	{
		// 删除文件夹(递归)

		QDir dir(path);
		QFileInfoList info_list = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot | QDir::NoSymLinks | QDir::AllDirs);
		foreach(QFileInfo file_info, info_list)
		{
			if (file_info.isDir())
			{
				RemoveFilesInDir(file_info.absoluteFilePath());
			}
			else if (file_info.isFile())
			{
				QFile file(file_info.absoluteFilePath());
				file.remove();
			}
		}
		QDir temp_dir;
		temp_dir.rmdir(path) ;

	}

拷贝文件夹:

	bool CopyDirectoryFiles( const QString &fromDir, const QString &toDir )
	{
		QDir sourceDir(fromDir);
		QDir targetDir(toDir);
		if(!targetDir.exists())
		{   // /**< 如果目标目录不存在,则进行创建 */
			if(!targetDir.mkdir(targetDir.absolutePath()))
				return false;
		}

		QFileInfoList fileInfoList = sourceDir.entryInfoList();
		foreach(QFileInfo fileInfo, fileInfoList)
		{
			QString filename = fileInfo.filePath();

			if(fileInfo.fileName() == "." || fileInfo.fileName() == "..")
				continue;

			if(fileInfo.isDir())
			{   // /**< 当为目录时,递归的进行copy */
				if(!CopyDirectoryFiles(fileInfo.filePath(), targetDir.filePath(fileInfo.fileName())))
					return false;
			}
			else
			{           
				// 存在同名文件,则跳过拷贝
				if(targetDir.exists(fileInfo.fileName()))
				{
					continue;
				}

				// 进行文件copy
				if(!QFile::copy(fileInfo.filePath(),targetDir.filePath(fileInfo.fileName())))
				{
					return false;
				}
			}
		}
		return true;
	}

拷贝文件:

	bool CopySinglelFile(const QString& sourceFilePath, QString& destFilePath, bool coverFileIfExist)
	{
		destFilePath.replace("\\","/");

		//判断是否自拷贝
		if (sourceFilePath == destFilePath)
		{
			return true;
		}

		//判断源文件是否存在
		if (!QFile::exists(sourceFilePath))
		{
			return false;
		}

		//目的路径
		QDir* destDir = new QDir;
		//判断路径下是否已经存在
		if (destDir->exists(destFilePath))
		{
			if (coverFileIfExist)
			{
				//删除同名文件
				destDir->remove(destFilePath);
			}
		}

		//执行拷贝
		return QFile::copy(sourceFilePath,destFilePath);
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值