как создать случайные имена папок длиной 12 символов в .NET

StackOverflow https://stackoverflow.com/questions/812310

Вопрос

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

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

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

Это было полезно?

Решение

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

 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 возможных комбинаций.

Другие советы

System.IO.Path.GetRandomFileName()

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

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

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

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

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

СОЗДАТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ seq_user_id;

ВЫБЕРИТЕ seq_user_id.NEXTVAL FROM dual;

INSERT INTO test_bed (user_id, class_type, room_location) VALUES (seq_user_id.NEXTVAL, «Подводное плетение корзин», «RM1205»);

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top