QT — копирование файла в AppData

Моя программа предлагает пользователю выбрать файл для обработки. Моя программа обрабатывает его и пытается сохранить файл в AppData.

Вот как я это делаю:

QSettings settings(QSettings::IniFormat, QSettings::UserScope, "FlameTool", "FlameTool");
addin_path = QFileInfo(settings.fileName()).absolutePath() + "/addins/" + id + ".limod" ;
qDebug(addin_path.toLocal8Bit());

if(QFile::copy(QDir::toNativeSeparators(file_passed),QDir::toNativeSeparators(addin_path)))
qDebug("copied");
else
qDebug("not copied");

Каждый раз, когда эта часть кода выполняется, она выводит «не скопировано».
Как я могу скопировать файл?

2

Решение

Чтобы сделать то, что вы хотите, я бы посоветовал использовать вместо этого класс QStandardPaths:

Установите имя приложения, например, в main.cpp

int main(...)
{
[..]
a.setApplicationName("FlameTool");
}

Скопируйте файл:

QString addin_path = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
QDir dir(addin_path);
if (!dir.exists())
dir.mkpath(addin_path);
if (!dir.exists("addins"))
dir.mkdir("addins");

dir.cd("addins");
addin_path = dir.absoluteFilePath(id + ".limod");
if (QFile::exists(addin_path))
QFile::remove(addin_path);

if(QFile::copy(file_passed, addin_path))
qDebug("copied");
else
qDebug("not copied");

Пожалуйста, обратите внимание, что:

Обратите внимание, что если файл с именем newName уже существует, copy ()
возвращает false (т.е. QFile не будет перезаписывать его).

4

Другие решения

Во-первых, вы должны удалить все существующие (потому что это предотвратит копирование как QFile::copy не перезаписывает какой-либо существующий файл) и предупреждает о невозможности удаления. Во-вторых, вы должны проверить путь назначения.

1

По вопросам рекламы [email protected]