Seite 1 von 1
Unique Filename
Verfasst: 18. Januar 2011 13:54
von Willi2793
Hallo,
ich möchte gerne eine Datei erstellen die ein festes Prefix und ein festes Suffix hat. Dazwischen ist Platz für einen Identifier. Wie der Titel schon sagt soll der Dateiname unique werden. Und im Gegensatz zu QTemporaryFile auch permanent bleiben. Ich habe eine dafür geeignete Funktion in QT leider nicht gefunden. Gibt es die wirklich nicht oder sollte ich minen Optiker/Augenarzt wieder konsultieren? Und wenn dem so ist: wie heißt die Funktion?
Danke und Grüße,
Willi
Verfasst: 18. Januar 2011 14:02
von Oxymoron
Ein Dateiname muss doch eh einzigartig sein? Oder willst du, dass dein Programm nie wieder eine Datei gleichen Namens erzeugt?
Wenn du nur irgendeinen zufälligen Namen brauchst: Zufallszahl, Hashfunktion darüber laufen lassen, dann kurz prüfen ob es eine gleichnamige Datei schon gibt - fertig.
Verfasst: 18. Januar 2011 16:06
von Willi2793
Klar muss ein Dateiname einzeln sein. Ich dachte das eher so in der Richtung das die Funktion in der Art aufgerufen wird:
und dann in dem Directory "dir" eine neue Datei erzeugt mit Prefix "prefix" und Suffix "suffix". Wenn die Funktion mehrfach aufgerufen wird wird dann halt zwischen Prefix und Suffix ein Wert gesetzt.
Aber Deine Antwort impliziert das es das wohl nicht gibt.
Danke.
QUuid
Verfasst: 18. Januar 2011 16:17
von odt
Mit einer UUID kannst Du einen eindeutigen Identifier "machen". Das folgende Codebeispiel habe ich zusammengewürfelt.
Code: Alles auswählen
QUuid uuid = QUuid::createUuid() );
QString str = uuid.toString();
// 01234567890123456789012345678901234567
// 12345678 1234 1234 1234 123456789012
// {0069e0d9-528b-41d6-91d1-169e6f0de6e2}
str = str.mid( 1, 8 ) + str.mid( 10, 4 ) + str.mid( 15, 4 ) + str.mid( 20, 4 ) + str.mid( 25, 12 );
Q_ASSERT( str.length() == 32 );
Verfasst: 18. Januar 2011 16:42
von padreigh
Code: Alles auswählen
#include <QtGlobal>
#include <QString>
#include <QSet>
#include <algorithm>
QString gimmeUniqueName()
{
// ressource for the name
static QString all ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890______");
// already given names for the unlikely case that ... yeah well ...
static QSet<QString> used;
// mix it
while (used.contains(all)) {
std::random_shuffle(all.begin(),all.end());
}
used.insert(all);
return all;
}
int main(int argc, char *argv[])
{
qsrand(QTime(0,0,0,0).msecsTo(QTime::currentTime()));
QString uniqueName = gimmeUniqueName() ;
}
So ? Sind aber lange Namen

Verfasst: 18. Januar 2011 17:13
von Willi2793
Vielen Dank
