二进制文件写出
// fileName含后缀, 生成随机临时文件名(Tmp_时间戳_进程ID_三位随机数_正式文件名) QString AIbinIOcontrol::geneRandomTmpFilename(QString fileName) { // #include <QDataStream> // #include <QRandomGenerator> // #include <QDateTime> // #include <QCoreApplication> const QString timeStamp = QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzz"); const qint64 pid = QCoreApplication::applicationPid(); const int randNum = QRandomGenerator::global()->bounded(1000); return (QString("Tmp_%1_%2_%3_")+fileName).arg(timeStamp).arg(pid).arg(randNum); } bool WriteOutAIres(QString folderPath, QString fileName, string VersionN) { // ------[保存临时文件]------ // BT_OCT::creatSavePath(folderPath); // 创建保存文件的文件夹 const QString TmpFileName = geneRandomTmpFilename(fileName); // 创建临时文件名 QString filePath = folderPath + "/" + TmpFileName; QFile file(filePath); if (!file.open(QIODevice::WriteOnly)) { cout << "结果保存失败,因为文件地址异常:"+filePath.toStdString() << endl; return false; } QDataStream out(&file); out << VersionN; // 写入版本号名称 out << 各种数据(int,double,map,vector); // 写入数据信息 out << 各种数据(int,double,map,vector); // 写入数据信息 file.close(); // ------[将保存的临时文件rename为正式文件名]------ // QString realfilePath = folderPath + "/" + fileName; QFile realfile(realfilePath); if (realfile.exists()){ if (!realfile.remove()) { file.remove(); cout << "结果保存失败,旧文件无法被删除(临时文件已清理)" << endl; return false; } cout << "旧文件已成功删除" << endl; } if (!QFile::rename(filePath, realfilePath)) { file.remove(); cout << "结果保存失败,临时文件重命名成正式保存文件时失败(临时文件已清理)" << endl; return false; } cout << "###################" << endl; cout << ">>> 结果成功保存 <<<" << endl; cout << "###################" << endl; return true; }
二进制文件读入
bool ReadInAIres(QString folderPath, QString fileName, string VersionN) { BT_OCT::creatSavePath(folderPath); QString filePath = folderPath + "/" + fileName; QFile file(filePath); if (!file.open(QIODevice::ReadOnly)) { cout << "结果读取失败,因为地址异常:"+filePath.toStdString() << endl; return false; } QDataStream in(&file); // ------[读出文件名及版本号]------ // std::string versionName; in >> versionName; if (versionName!=VersionN){ cout << "结果读取失败,因为版本不一致,当前:"+versionName+",期望:"+VersionN << endl; return false; } in >> 数据容器; in >> 数据容器 file.close(); return true; }