写点什么

QT 实现 文件夹复制

作者:用户10086
  • 2022 年 7 月 12 日
  • 本文字数:1197 字

    阅读完需:约 4 分钟


前提要点

文件夹的复制,主要可以用来抑制文件夹,但是在使用后会发现,他复制的是文件内容,所以在使用这个函数之前需要在目标目录新建一个与此目录相同的文件夹,这样才可以实现文件夹的完美复刻。


接下来开始代码的讲解!



QDir directory(fileName);
if (!directory.exists())
{
qDebug()<<"non-existent";
return false;
}
复制代码


QFile::exists(fileName) 判断文件名是否存在,判断文件是否存在


文件不存在则退出


QString srcPath = QDir::toNativeSeparators(fileName);
if (!srcPath.endsWith(QDir::separator()))
srcPath += QDir::separator();
QString dstPath = QDir::toNativeSeparators(newName);
if (!dstPath.endsWith(QDir::separator()))
dstPath += QDir::separator();
复制代码


QDir::toNativeSeparators 构造文件路径时使用 由于不同的平台所使用的文件路径分隔符


QDir::separator() 返回分隔符


QStringList fileNames = directory.entryList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);


QDir::entryInfoList 这个函数可以对当前目录下的文件和子目录进行遍历


QDir::NoDotAndDotDot 如果只写着一个参数 会覆盖原本的参数,导致文件和其他的目录都隐藏了 所以推荐使用 QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden


用这个是可以试用成功的,推荐


for (QStringList::size_type i=0; i != fileNames.size(); ++i)
{
QString fileName = fileNames.at(i);
QString srcFilePath = srcPath + fileName;
QString dstFilePath = dstPath + fileName;
QFileInfo fileInfo(srcFilePath);
if (fileInfo.isFile() || fileInfo.isSymLink())
{
QFile::setPermissions(dstFilePath, QFile::WriteOwner);

QFile::copy(srcFilePath, dstFilePath);
}
else if (fileInfo.isDir())
{
QDir dstDir(dstFilePath);
dstDir.mkpath(dstFilePath);
if (!CopyDir(*srcFilePath*, *dstFilePath*))
{
error = true;
}
}
}
return !error;
复制代码


QFileInfo 类 他具有获取文件详细信息的功能,QFile 只能用来设置文件的读写打开等等一系列的外部操作,QFileInfo 算是对 QFile 的一种补充,可以通过使用这个类获取文件的名称、文件的大小,文件的访问权限以及此文件是不是一个符号链接等信息


fileInfo.isFile() 判断是否是文件


fileInfo.isSymLink() 判断是否是符号链接


如果不是文件或者符号连接的情况 那判断是不是文件夹,如果是文件夹就再次进入复制文件夹的循环,直到找到是文件为止 复制结束

发布于: 刚刚阅读数: 3
用户头像

用户10086

关注

还未添加个人签名 2022.07.01 加入

还未添加个人简介

评论

发布
暂无评论
QT实现 文件夹复制_qt_用户10086_InfoQ写作社区