как создать случайные имена папок длиной 12 символов в .NET
-
03-07-2019 - |
Вопрос
Я хотел бы создать случайные имена папок на своем веб-сайте для хранения изображений и их миниатюр, но вместо того, чтобы использовать полную версию сгенерированного 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»);