QT实现 文件夹复制

举报
咚咚隆地咚 发表于 2022/09/20 17:57:52 2022/09/20
【摘要】 文件夹的复制,主要可以用来抑制文件夹,但是在使用后会发现,他复制的是文件内容,所以在使用这个函数之前需要在目标目录新建一个与此目录相同的文件夹,这样才可以实现文件夹的完美复刻。接下来开始代码的讲解!QDir directory(fileName); if (!directory.exists()) { qDebug()<<"non-existent...

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

接下来开始代码的讲解!


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() 判断是否是符号链接

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。