Копирование каталога и подкаталога

Привет я пытаюсь скопировать каталог и все его содержимое. Я подумал, что хорошее начало — перечислить все подкаталоги, чтобы я мог получить представление и скопировать подструктуру в папку назначения.

но мне нужно получить путь от 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

Решение

Проблема в том, что, как я написал в комментарии, вы создаете информацию о файле с полным путем, а не относительным путем, который вы хотите иметь.

Есть два подхода, оба представлены ниже, чтобы решить эту проблему:

1) Обходной путь будет заключаться в удалении «префикса» вручную путем манипулирования строками.

2) Лучшим решением было бы получить относительный путь из абсолютного и корневого путей, используя соответствующий удобный метод QDir.

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;
}

main.pro

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

Сборка и запуск

qmake && make && ./main

Обратите внимание, что вам не нужно создавать информацию о файле на основе пути, так как QDirIterator экземпляр может вернуть это напрямую.

3

Другие решения

Почему бы просто не использовать методlativePath этого класса? Благодаря этому методу вы можете получить относительный путь от вашего пути -> ссылка на сайт

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector