Qt - 将文件从一个目录复制到另一个目录

41

我正在使用QT,但我找不到如何将文件从一个目录复制到另一个目录的方法。请问应该如何实现?


8
你至少尝试过任何事情吗? - Nadeem_MK
1
我尝试使用QFile :: copy()方法。现在它可以工作了。谢谢。 - joki
3个回答

97
你可以使用提供了一个复制方法的QFile
QFile::copy("/path/file", "/path/copy-of-file");

4
我认为您还应该指明,在发生错误时它会返回 false。可以这样写:if(!QFile::copy(...)) { ...处理错误... }。在某些情况下,可以忽略错误,而在其他情况下,进程必须停止! - Alexis Wilke
是的,在使用QFile :: copy从一个驱动器字母移动到另一个驱动器字母时,我确实遇到了错误。结果证明,QFile:rename函数对我有用。 - Manjunath
如果复制时间太长,UI 就会停止响应。 - Tuncay Ince

20

如果目标文件已存在,QFile::copy 将无法工作。解决方案是验证目标文件是否存在,然后删除它:

如果目标文件已存在,QFile::copy 将无法工作。解决方案是验证目标文件是否存在,然后删除它:

if (QFile::exists("/path/copy-of-file"))
{
    QFile::remove("/path/copy-of-file");
}

QFile::copy("/path/file", "/path/copy-of-file");

5
为什么不直接无条件使用QFile::remove?这样更易读且更快。 - spectras

-4
以下代码在Windows中可以正常工作,原因是它会设置路径到指定的驱动器并创建您在UI模式下创建的文件夹。然后将文件从源复制到目标位置。这里的源是安装目录中包含一些用于绘制曲线的文件,这些文件不会被用户修改,他们只是使用它们。
因此,这个代码实现了从安装目录复制文件到指定文件夹的功能。
void MainWindow::on_pushButton_2_clicked()
{
    QString str5 = ui->lineEdit->text();
    QString src = "."; QString setpath;
    QDir dir(src);
    if(!dir.exists()){
        return;
    }
    dir.cdUp();
    //dir.cdUp();
    setpath = "E://";
    dir.setPath(setpath);
    QString dst_path = str5 + QDir::separator() ;
    dir.mkpath(dst_path);
    dir.cd(dst_path);
    QString filename = "gnu.plt";
    QString filename2 = "Load curve.plt";
    QString filename3 = "tube temp.plt";
    QFile file(filename);
    QFile file1(filename2);
    QFile file2(filename3);
    file.copy(src+QDir::separator()+filename, setpath+QDir::separator()+str5+QDir::separator()+filename);
    file1.copy(src+QDir::separator()+filename2, setpath+QDir::separator()+str5+QDir::separator()+filename2);
    file2.copy(src+QDir::separator()+filename3, setpath+QDir::separator()+str5+QDir::separator()+filename3);
}

1
当您将setpath变量设置为"E://"时,您可能需要使用QDir::separator()。看起来你的意思也是要用"\\"。此外,您的答案对于OP的问题而言过于专业化了。你应该简化一下。最后,在复制文件时不需要创建QFile对象,因为有一个静态函数可以使用。但是如果您确实创建了这样的QFile,那么您应该使用一个文件名进行复制:file.copy(destination); - Alexis Wilke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接