2015-01-01 2 views
2

Я хочу, чтобы скопировать текстовый файл с QFile с этим кодом: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 и что исходный файл существует, и у вас есть разрешение на чтение. –

+0

возвращает false. в выбранном каталоге существует только файл, который я хочу скопировать. – hardc0der

ответ

0

Я заметил ту же проблему, и кажется, что реализация copy() не является хорошей. Это почему-то кажется, что у вас нет достаточного разрешения на копирование, даже если у вас есть. Некоторые конфликты разрешения Windows.

Там нет хорошего обходного пути, но вы можете попытаться скопировать файл на переделку всего процесса (это иногда работает):

  1. Открыть исходный файл для чтения
  2. Открыть (создать) файл назначения для записи.
  3. скопируйте все данные из первого файла во второй.

Далеко от совершенства, но иногда оно работает.

+0

хорошо нормально. но нет ли лучшего способа? – hardc0der

+0

Да. Использовать Windows native API CopyFile() –

+1

В то же время убедитесь, что у вас есть достаточно разрешений, которые не требуют повышения, и этот файл назначения не существует. –

Смежные вопросы