26 QString backupFileName = qFilename + backupExtension;
28 if (!backupDir.isEmpty()) {
29 QFileInfo fileInfo(qFilename);
30 backupFileName = backupDir + QLatin1Char(
'/') + fileInfo.fileName() + backupExtension;
34 QFile::remove(backupFileName);
35 return QFile::copy(qFilename, backupFileName);
40 QFileInfo fileInfo(qFilename);
45 if (backupDir.isEmpty()) {
46 sTemplate = qFilename + QLatin1String(
".%1") + backupExtension;
48 sTemplate = backupDir + QLatin1Char(
'/') + fileInfo.fileName() + QLatin1String(
".%1") + backupExtension;
52 QDir d = backupDir.isEmpty() ? fileInfo.dir() : backupDir;
53 d.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
55 QString nameFilter = fileInfo.fileName() + QLatin1String(
".*") + backupExtension;
56 nameFilter.replace(
'[',
'*');
57 nameFilter.replace(
']',
'*');
60 d.setNameFilters(nameFilters);
61 d.setSorting(QDir::Name);
63 uint maxBackupFound = 0;
64 const QFileInfoList infoList = d.entryInfoList();
65 for (
const QFileInfo &fi : infoList) {
66 if (fi.fileName().endsWith(backupExtension)) {
68 QString sTemp = fi.fileName();
70 sTemp.truncate(fi.fileName().length() - backupExtension.length());
73 int idex = sTemp.lastIndexOf(QLatin1Char(
'.'));
76#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
77 const uint num = QStringView(sTemp).mid(idex + 1).toUInt(&ok);
79 const uint num = sTemp.midRef(idex + 1).toUInt(&ok);
82 if (num >= maxBackups) {
83 QFile::remove(fi.filePath());
85 maxBackupFound = qMax(maxBackupFound, num);
93 QString to = sTemplate.arg(maxBackupFound + 1);
95 for (
int i = maxBackupFound; i > 0; i--) {
96 QString from = sTemplate.arg(i);
98 QFile::rename(from, to);
104 bool r = QFile::copy(qFilename, sTemplate.arg(1));