Привет я пытаюсь скопировать каталог и все его содержимое. Я подумал, что хорошее начало — перечислить все подкаталоги, чтобы я мог получить представление и скопировать подструктуру в папку назначения.
но мне нужно получить путь от QDir и далее, а не путь от корня машины,
как мне это сделать, чтобы я получил sweetassurfwear / папка / папка вместо / USR / местные / сайты / sweetassurfwear / папка / папка
вот мой код пока
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) Лучшим решением было бы получить относительный путь из абсолютного и корневого путей, используя соответствующий удобный метод QDir.
#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
экземпляр может вернуть это напрямую.
Почему бы просто не использовать методlativePath этого класса? Благодаря этому методу вы можете получить относительный путь от вашего пути -> ссылка на сайт