Frage

Ich möchte auf meiner Website zufällige Ordnernamen, um Bilder zu speichern und ihre Thumbnails, aber anstatt die Vollversion eines erzeugten GUID, ich dachte über die Verwendung von nur einen Teil davon, vielleicht auch nur die ersten 8 Zeichen und möglicherweise base64 kodieren sie. obwohl ich mache mir Sorgen um mögliche Kollisionen.

Kann mir jemand in die richtige Richtung zeigen, ob es nicht gut genug Idee? gibt es alternative Lösungen, die, wenn ich den Namen, unter einer bestimmten Anzahl von Zeichen halten will verwendet werden können?

UPDATE : Ich versuche, von path.GetRandomFileName zu bleiben weg, weil sie roh guid verwendet, und es ist nicht mehr als 12 Zeichen lang ...

War es hilfreich?

Lösung

Warum nicht einfach so etwas wie diese, und Schleife um, bis Sie die Datei ohne Konflikt erstellen?

 const string ValidChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

 static string GenerateName(Random random, int length)
 {
     char[] chars = new char[length];
     for (int i=0; i < length; i++)
     {
         chars[i] = ValidChars[random.Next(ValidChars.Length)];
     }
     return new string(chars);
 }

Der Grund, in der RNG für das Bestehen ist es, die typischen Probleme der Schaffung eines neuen RNG in dem Verfahren zu vermeiden (Duplikate, wenn in schneller Folge genannt), während keine statische RNG verwenden (die nicht thread ist).

Eine Alternative wäre einen einzelnen statischen Nur-Lese-RNG zu haben, und serialisiert werden Anrufe innerhalb GenerateName durch Sperren.

Der wichtigste Punkt ist, dass irgendwie Sie einen beliebigen Namen zu generieren, und Sie halten nur versuchen, Dateien mit zufälligen Namen zu erstellen, bis Sie Erfolg haben, was wahrscheinlich ist, sehr schnell geschehen (12 Zeichen [AZ 0 -9] gibt 4.738.381.338.321.616.896 mögliche Kombinationen).

Andere Tipps

System.IO.Path.GetRandomFileName ()

Sie können die Path-Klasse in System.IO verwenden, unter anderem, zufälligen Datei- und Ordnernamen generieren.

Wenn Sie eine Datenbank für Ihre Website verwenden, dann können Sie eine automatisch inkrementierende Zahl oder eine Sequenz verwenden, um eindeutige Dateinamen für die Bilder zu erzeugen.

Verwenden von Oracle Sie würde eine Sequenz wie folgt erstellen;

FOLGE sequence_name CREATE     MINVALUE Wert     MAXVALUE Wert     START MIT Wert     INCREMENT BY Wert     CACHE Wert;

Um den nächsten Wert in der Folge erhalten Sie die nextval der Sequenz verwenden. Zum Beispiel

CREATE SEQUENCE seq_user_id;

SELECT seq_user_id.NEXTVAL FROM dual;

INSERT INTO test_bed (user_id, CLASS_TYPE, room_location) VALUES (seq_user_id.NEXTVAL, 'Unterwasser Basketweaving', 'RM1205');

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top