come creare nomi di cartelle casuali lunghi 12 caratteri in .NET
-
03-07-2019 - |
Domanda
Vorrei creare nomi di cartelle casuali sul mio sito Web per archiviare immagini e le loro miniature, ma invece di utilizzare la versione completa di una guida generata, stavo pensando di usarne solo una parte, forse solo i primi 8 caratteri e possibilmente base64 lo codifica. sono preoccupato per possibili collisioni.
Qualcuno può indicarmi nella giusta direzione se è o no un'idea abbastanza buona? ci sono soluzioni alternative che posso usare se voglio mantenere il nome sotto un certo numero di caratteri?
AGGIORNAMENTO : Sto cercando di stare lontano dal percorso.GetRandomFileName, dal momento che utilizza raw guid e non è lungo 12 caratteri ...
Soluzione
Perché non usare semplicemente qualcosa del genere e fare un giro circolare fino a quando non è possibile creare il file senza conflitti?
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);
}
La ragione per passare al RNG è evitare i problemi tipici della creazione di un nuovo RNG nel metodo (duplicati quando chiamati in rapida successione) mentre non si utilizza un RNG statico (che non è thread-safe).
Un'alternativa sarebbe quella di avere un solo RNG statico di sola lettura e serializzare le chiamate all'interno di GenerateName
bloccando.
Il punto principale è che in qualche modo generi un nome casuale e continui a provare a creare file con nomi casuali fino a quando non ci riesci, il che probabilmente accadrà molto rapidamente (12 caratteri [AZ 0 -9] dà 4.738.381.338.321.616.896 combinazioni possibili).
Altri suggerimenti
System.IO.Path.GetRandomFileName ()
È possibile utilizzare la classe Path in System.IO per, tra le altre cose, generare nomi di file e cartelle casuali.
Se si utilizza un database per il proprio sito Web, è possibile utilizzare un numero con incremento automatico o una sequenza per generare nomi di file univoci per le immagini.
Usando Oracle creeresti una sequenza come segue;
CREATE SEQUENCE nome_ sequenza Valore MINVALUE Valore MAXVALUE INIZIA CON valore INCREMENTO PER valore Valore CACHE;
Per ottenere il valore successivo nella sequenza, utilizzare il valore successivo della sequenza. Ad esempio
CREA SEQUENZA seq_user_id;
SELEZIONA seq_user_id.NEXTVAL FROM dual;
INSERT INTO test_bed (user_id, class_type, room_location) VALORI (seq_user_id.NEXTVAL, 'Underwater Basketweaving', 'RM1205');