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 ...

È stato utile?

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');

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top