OSDN Git Service

Added function to generate unique file name, using an increasing counter.
authorLoRd_MuldeR <mulder2@gmx.de>
Wed, 14 Dec 2016 14:04:23 +0000 (15:04 +0100)
committerLoRd_MuldeR <mulder2@gmx.de>
Wed, 14 Dec 2016 14:04:23 +0000 (15:04 +0100)
include/MUtils/Global.h
src/Global.cpp

index 3bd3a5a..8807d32 100644 (file)
@@ -84,8 +84,9 @@ namespace MUtils
        MUTILS_API quint32 next_rand32(void);
        MUTILS_API quint64 next_rand64(void);
 
-       //Temp File Name
+       //File Name
        MUTILS_API QString make_temp_file(const QString &basePath, const QString &extension, const bool placeholder = false);
+       MUTILS_API QString make_unique_file(const QString &basePath, const QString &baseName, const QString &extension, const bool fancy = false);
 
        //Parity
        MUTILS_API bool parity(quint32 value);
index 0c6260a..a9a9f4e 100644 (file)
@@ -112,7 +112,7 @@ QString MUtils::rand_str(const bool &bLong)
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-// GET TEMP FILE NAME
+// GENERATE FILE NAME
 ///////////////////////////////////////////////////////////////////////////////
 
 QString MUtils::make_temp_file(const QString &basePath, const QString &extension, const bool placeholder)
@@ -138,10 +138,36 @@ QString MUtils::make_temp_file(const QString &basePath, const QString &extension
                }
        }
 
-       qWarning("Failed to generate unique temp file name!");
+       qWarning("Failed to generate temp file name!");
        return QString();
 }
 
+QString MUtils::make_unique_file(const QString &basePath, const QString &baseName, const QString &extension, const bool fancy)
+{
+       quint32 n = fancy ? 2 : 0;
+       QString fileName = fancy ? QString("%1/%2.%3").arg(basePath, baseName, extension) : QString();
+       while (fileName.isEmpty() || QFileInfo(fileName).exists())
+       {
+               if (n <= quint32(USHRT_MAX))
+               {
+                       if (fancy)
+                       {
+                               fileName = QString("%1/%2 (%3).%4").arg(basePath, baseName, QString::number(n++), extension);
+                       }
+                       else
+                       {
+                               fileName = QString("%1/%2.%3.%4").arg(basePath, baseName, QString::number(n++, 16).rightJustified(4, QLatin1Char('0')), extension);
+                       }
+               }
+               else
+               {
+                       qWarning("Failed to generate unique file name!");
+                       return QString();
+               }
+       }
+       return fileName;
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 // COMPUTE PARITY
 ///////////////////////////////////////////////////////////////////////////////