Qt下载模板到本地文件内容丢失问题
上源码
关键点已标注在源码中 A, B…
// 保存的文件路径后缀
QString dateTime = Myapp::getCurrentTimeDescYMDHms().replace(" ", "").replace("-", "").replace(":", "");
// 临时文件名称
QString newFileName = QString(QUuid::createUuid().toString().replace("{", "").replace("}", "").replace("-", ""));
// 复制文件
QFile::copy(tmplateFile, newFileName);
// 获取下载的文件路径
QString savePath = QFileDialog::getSaveFileName(this, "保存模板文件",
saveFileName.replace(".xlsx", dateTime+".xlsx"),
"Excel 文件 (*.xlsx)");
if (!savePath.isEmpty()) {
// 使用局部作用域确保xlsx对象及时析构
QXlsx::Document xlsx(newFileName);
if (xlsx.saveAs(savePath)) {
qDebug() << "下载成功";
} else {
qDebug() << "保存失败";
MyHelper::ShowMessageBoxError(tr("保存失败!"));
}
// 延迟删除确保操作系统释放锁. 此步骤最为关键
QTimer::singleShot(100, [newFileName]() {
QFile tmpFile(newFileName);
if (tmpFile.exists()) {
tmpFile.setPermissions(QFile::WriteOwner | QFile::ReadOwner);
if (tmpFile.remove()) {
qDebug() << "临时文件删除成功";
} else {
qDebug() << "最终删除失败:" << tmpFile.errorString();
}
}
});
}