как создать случайные имена папок длиной 12 символов в .NET - PullRequest
4 голосов
/ 01 мая 2009

Я хотел бы создать случайные имена папок на своем веб-сайте для хранения изображений и их миниатюр, но вместо использования полной версии сгенерированного guid я думал об использовании только его части, возможно, только первых 8 символов и возможно base64 закодировать его. Я беспокоюсь о возможных столкновениях, хотя.

Может ли кто-нибудь указать мне правильное направление относительно того, достаточно ли это хорошая идея? Есть ли альтернативные решения, которые можно использовать, если я хочу сохранить имя под определенным количеством символов?

ОБНОВЛЕНИЕ : я пытаюсь держаться подальше от path.GetRandomFileName, так как он использует сырой guid и его длина не 12 символов ...

Ответы [ 4 ]

13 голосов
/ 01 мая 2009

Почему бы просто не использовать что-то подобное и не переходить в циклы, пока вы не сможете создать файл без конфликта?

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

Причина передачи в RNG состоит в том, чтобы избежать типичных проблем создания нового RNG в методе (дубликаты при вызове в быстрой последовательности) без использования статического RNG (который не является потокобезопасным).

Альтернативой может быть наличие одного статического RNG только для чтения и сериализация вызовов в пределах GenerateName путем блокировки.

Суть в том, что как-то вы генерируете случайное имя, и вы просто продолжаете пытаться создавать файлы со случайными именами, пока не добьетесь успеха, что, вероятно, произойдет очень быстро (12 символов [AZ 0- 9] дает 4 738 381 338 321 616 896 возможных комбинаций).

9 голосов
/ 01 мая 2009

System.IO.Path.GetRandomFileName ()

3 голосов
/ 01 мая 2009

Вы можете использовать класс Path в System.IO, чтобы, помимо прочего, генерировать случайные имена файлов и папок.

1 голос
/ 01 мая 2009

Если вы используете базу данных для своего веб-сайта, то вы можете использовать автоматически увеличивающийся номер или последовательность для генерации уникальных имен файлов для изображений.

Используя Oracle, вы создали бы последовательность следующим образом:

CREATE SEQUENCE sequence_name Значение MINVALUE MAXVALUE значение НАЧАТЬ со значения INCREMENT BY value Значение CACHE;

Чтобы получить следующее значение в последовательности, вы используете следующее значение последовательности. Например

СОЗДАТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ 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, «Подводное плетение корзин», «RM1205»);

...