2

我的程序提示用户选择要处理的文件。我的程序对其进行处理并尝试将文件保存到 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");

每次执行这部分代码时,它都会输出“未复制”。如何复制文件?

4

2 回答 2

5

为了做你想做的事,我想建议使用 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 不会覆盖它)。

于 2014-03-10T16:42:12.117 回答
1

首先,您应该删除任何现有的(因为它会阻止复制,因为QFile::copy不会覆盖任何现有文件)文件,如果无法删除,则会发出警告。其次,您应该验证目标路径。

于 2014-03-10T16:39:51.157 回答