【问题标题】:Copying Directory and sub directory复制目录和子目录
【发布时间】:2013-12-31 09:31:58
【问题描述】:

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

但我需要从 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));
    }

}

【问题讨论】:

    标签: c++ qt qt4 qtcore qdir


    【解决方案1】:

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

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

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

    main.pro

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

    构建并运行

    qmake && make && ./main
    

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

    【讨论】:

      【解决方案2】:

      为什么不直接使用这个类的 relativePath 方法呢?多亏了这种方法,您可以从路径中获取相对路径 -> link

      【讨论】:

      • 我收到此错误 cpp:33: error: ‘class QString’ has no member named ‘relativePath’
      猜你喜欢
      • 2014-11-22
      • 2011-11-03
      • 1970-01-01
      • 2023-04-08
      • 2011-10-14
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多