我的程序提示用户选择要处理的文件。我的程序处理它并尝试将文件保存到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");
每次执行此部分代码时,都会输出“未复制”。 我该如何复制文件?
答案 0 :(得分:4)
为了做你想做的事,我想建议使用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不会覆盖它)。
答案 1 :(得分:1)
首先,您应该删除任何现有的(因为它会阻止复制,因为QFile::copy
不会覆盖任何现有文件)文件,并警告是否无法删除。其次,您应该验证目标路径。