Qt删除和拷贝目录
时间: 2023-08-31 08:11:22 浏览: 72
可以使用QDir类中的removeRecursively()函数来删除一个目录及其所有子目录和文件;使用QFile类中的copy()函数来拷贝一个文件。下面是一个简单的示例代码,实现删除一个目录和拷贝一个目录:
```cpp
#include <QDir>
#include <QFile>
// 删除目录及其子目录和文件
bool removeDir(const QString &dirPath)
{
QDir dir(dirPath);
if (!dir.exists()) {
return true;
}
// 遍历目录和子目录
foreach (const QFileInfo &info, dir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) {
if (info.isDir()) {
// 递归删除子目录
if (!removeDir(info.filePath())) {
return false;
}
} else {
// 删除文件
if (!dir.remove(info.fileName())) {
return false;
}
}
}
// 删除目录
return dir.rmdir(dirPath);
}
// 拷贝目录
bool copyDir(const QString &srcPath, const QString &dstPath)
{
QDir srcDir(srcPath);
QDir dstDir(dstPath);
if (!dstDir.exists()) {
dstDir.mkpath(dstPath);
}
// 遍历目录和子目录
foreach (const QFileInfo &info, srcDir.entryInfoList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst)) {
QString srcFilePath = info.filePath();
QString dstFilePath = dstPath + "/" + info.fileName();
if (info.isDir()) {
// 递归拷贝子目录
if (!copyDir(srcFilePath, dstFilePath)) {
return false;
}
} else {
// 拷贝文件
if (!QFile::copy(srcFilePath, dstFilePath)) {
return false;
}
}
}
return true;
}
int main()
{
// 删除目录
if (removeDir("/path/to/directory")) {
qDebug() << "Directory successfully removed";
} else {
qDebug() << "Failed to remove directory";
}
// 拷贝目录
if (copyDir("/path/to/source/directory", "/path/to/destination/directory")) {
qDebug() << "Directory successfully copied";
} else {
qDebug() << "Failed to copy directory";
}
return 0;
}
```
其中,/path/to/directory是要删除的目录的路径;/path/to/source/directory和/path/to/destination/directory是要拷贝的源目录和目标目录的路径。如果目录删除成功,将输出"Directory successfully removed";如果删除失败,将输出"Failed to remove directory";如果目录拷贝成功,将输出"Directory successfully copied";如果拷贝失败,将输出"Failed to copy directory"。
阅读全文