QT实现 文件夹复制
文件夹的复制,主要可以用来抑制文件夹,但是在使用后会发现,他复制的是文件内容,所以在使用这个函数之前需要在目标目录新建一个与此目录相同的文件夹,这样才可以实现文件夹的完美复刻。
接下来开始代码的讲解!
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() 判断是否是符号链接
如果不是文件或者符号连接的情况 那判断是不是文件夹,如果是文件夹就再次进入复制文件夹的循环,直到找到是文件为止 复制结束
- 点赞
- 收藏
- 关注作者
评论(0)