gpt4 book ai didi

c++ - 复制目录和子目录

转载 作者:行者123 更新时间:2023-11-30 02:49:58 34 4
gpt4 key购买 nike

您好,我正在尝试复制一个目录及其所有内容。我认为一个好的开始是列出所有子目录,这样我就可以了解并将子结构复制到我的目标文件夹。

但我需要从 QDir 开始获取路径,而不是从机器根目录开始的路径,我该怎么做才能让 sweetassurfwear/folder/folder 变成 /usr/local/websites/sweetassurfwear/folder/folder

到目前为止,这是我的代码

QDir targetDir1("/home/brett/sweetback");
targetDir1.mkdir("sweetassurfwear");

QDir targetDir("/usr/local/websites/sweetassurfwear");
targetDir.setFilter(QDir::NoDotAndDotDot| QDir::Dirs | QDir::Files);
QDirIterator it(targetDir, QDirIterator::Subdirectories);
while (it.hasNext()) {
QFileInfo Info(it.next().relativePath());
QString testName = QString(Info.fileName());
QString testPath = QString(Info.absoluteFilePath());
if(Info.isDir()){
// QString cpd = "/home/brett/sweetback/sweetassurfwear/";
// targetDir.mkdir(cpd+testName);
QString dirname = Info.filePath();
ui.textEdit->append(QString("Copy Files " + dirname));
}

}

最佳答案

问题是,正如我在评论中所写,您正在构建具有完整路径的文件信息,而不是您希望拥有的相对路径。

有两种方法可以解决这个问题:

1) 解决方法是通过字符串操作手动删除“前缀”。

2) 更好的解决方案是使用 corresponding QDir convenience method 从绝对路径和根路径中获取相对路径。 .

main.cpp

#include <QDir>
#include <QDirIterator>
#include <QString>
#include <QFileInfo>
#include <QDebug>
int main()
{
QDir targetDir("/usr/local");
targetDir.setFilter(QDir::NoDotAndDotDot| QDir::Dirs | QDir::Files);

QDirIterator it(targetDir, QDirIterator::Subdirectories);
while (it.hasNext()) {
it.next();
QFileInfo Info = it.fileInfo();
QString testName = Info.fileName();

// Work around
// QString testPath = Info.absoluteFilePath().mid(it.path().size()+1);

// Real solution
QString testPath = QString(targetDir.relativeFilePath(Info.absoluteFilePath()));

qDebug() << "TEST:" << testPath;
if(Info.isDir()) {
// QString cpd = "/home/brett/sweetback/sweetassurfwear/";
// targetDir.mkdir(cpd+testName);
QString dirname = Info.filePath();
}
}

return 0;
}

主程序

TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp

构建并运行

qmake && make && ./main

请注意,您实际上不需要根据路径构建文件信息,因为 QDirIterator 实例可以直接返回它。

关于c++ - 复制目录和子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20855055/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com