【问题标题】:Qt - copy a file from one directory to anotherQt - 将文件从一个目录复制到另一个
【发布时间】:2013-11-24 13:05:09
【问题描述】:

我正在使用 QT,我不知道如何将文件从一个目录复制到另一个目录?我怎样才能做到这一点?

【问题讨论】:

  • 您至少尝试过什么吗?
  • 我尝试使用 QFile::copy() 方法。现在它起作用了。谢谢。

标签: c++ qt


【解决方案1】:

您可以使用QFile,它提供了一种复制方法。

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

【讨论】:

  • 我认为您还应该指定它在错误时返回false。类似:if(!QFile::copy(...)) { ...handle error... }。在某些情况下可以忽略错误,在其他情况下,必须停止进程!
  • 是的,我在使用 QFile::copy 从一个驱动器号移动到另一个驱动器号时确实收到了一个错误。事实证明,QFile:rename 函数对我有用
  • 如果复制时间过长,界面会停止。
【解决方案2】:

如果目标文件存在,QFile::copy 将不起作用。解决方案是验证目标文件是否存在,然后将其删除:

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

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

【讨论】:

  • 为什么不只是 QFile::remove 无条件?这更容易阅读,运行速度更快。
【解决方案3】:

出于特定原因,以下代码在 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);
}

【讨论】:

  • 当您将setpath 变量设置为"E://" 时,您可能需要使用QDir::separator()。看起来你的意思也是"\\"。此外,您的答案是专门针对 OP 所要求的。你应该简化了。最后,您不需要创建 QFile 对象来进行复制,因为有一个静态函数。但是,如果您确实创建了这样一个 QFile,那么您应该使用具有一个文件名的副本:file.copy(destination);
猜你喜欢
  • 2012-02-15
  • 2013-06-01
  • 2020-06-22
  • 2014-08-12
  • 2013-10-24
  • 2011-10-24
  • 1970-01-01
  • 2017-11-18
相关资源
最近更新 更多