QFile::copy静态函数无法复制文件。

3
我想使用以下代码使用 QFile 复制文本文件:
void MainWindow::on_pushButton_4_clicked()
{
    QFile::copy("C:/p/text.txt", "C:/p/text1.txt");
}

我在编译时没有收到任何错误提示,但是当我运行程序时,什么都没有发生。
以下是完整的源代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QfileDialog>
#include <QFile>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

int currentIndex = 0;

void MainWindow::on_pushButton_2_clicked()
{
    ui->lineEdit->setText(QFileDialog::getExistingDirectory());
}

void MainWindow::on_pushButton_clicked()
{
    currentIndex ++;
    ui->stackedWidget->setCurrentIndex(currentIndex);
}

void MainWindow::on_pushButton_3_clicked()
{
    currentIndex --;
    if(currentIndex < 0)
    {
        currentIndex ++;
    }
    ui->stackedWidget->setCurrentIndex(currentIndex);
}

void MainWindow::on_pushButton_4_clicked()
{
    QFile::copy("C:/p/text.txt", "C:/p/text1.txt");
}

什么原因会导致这种奇怪的行为?

2
如果成功则返回true;否则返回false。如果已经存在同名文件,则copy()函数返回false。我们需要更多信息来帮助您。 - Martin
1
请检查您是否具有修改C:\p的权限以及源文件是否存在并且您是否具有读取权限。 - Luca Carlon
在所选目录中,只有我想要复制的文件存在,因此它返回false。 - hardc0der
是的,我拥有所有需要的权限。 - hardc0der
Qt和Windows版本是什么? - Luca Carlon
显示剩余11条评论
1个回答

0

我注意到了同样的问题,似乎copy()的实现不太好。它会认为你没有足够的权限进行复制,即使你确实有权限。这是一些Windows权限冲突。

没有很好的解决方法,但你可以尝试通过重新执行整个过程来复制文件(有时候会起作用):

  1. 打开源文件以供阅读
  2. 打开(创建)目标文件以供写入。
  3. 将第一个文件中的所有数据复制到第二个文件中。

远非完美,但有时候会起作用。


好的,但是没有更好的方法吗? - hardc0der
是的。使用Windows本地API CopyFile()。 - Predrag Manojlovic
1
同时,请确保您拥有足够的权限,这些权限不需要提升,并且目标文件不存在。 - Predrag Manojlovic

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