كيفية إنشاء أسماء المجلدات عشوائية 12 حرفا في NET.

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

سؤال

وأود أن إنشاء أسماء المجلدات عشوائية على موقع الويب الخاص بي لتخزين الصور والصور المصغرة، ولكن بدلا من استخدام النسخة الكاملة من ارشد ولدت، كنت أفكر حول استخدام سوى جزء من ذلك، وربما فقط الأحرف 8 الأولى و ربما ترميز base64 في ذلك. أنا قلقة بشأن الاصطدامات المحتملة على الرغم من.

ويمكن للشخص لي نقطة في الاتجاه الصحيح بشأن ما إذا كان أو لم يكن هو فكرة جيدة بما فيه الكفاية؟ هل هناك حلول بديلة التي يمكن استخدامها إذا كنت تريد أن تبقي اسم في إطار عدد معين من الأحرف؟

<القوي> UPDATE : لاني اسعى الى الابتعاد عن path.GetRandomFileName، لأنه يستخدم ارشد الخام وليس 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 ثابت (الذي لا threadsafe).

وبديل سيكون لديك للقراءة فقط RNG ثابت واحد، وتسلسل المكالمات داخل GenerateName عن طريق تأمين.

والنقطة الرئيسية هي أن <م> بطريقة أو بأخرى يمكنك إنشاء اسم عشوائي، وعليك أن تبقي فقط في محاولة لإنشاء ملفات مع أسماء عشوائية حتى ينجح، والتي من المرجح أن يحدث بسرعة كبيرة (12 حرف [AZ 0 -9] يعطي 4.738.381.338.321.616.896 التركيبات الممكنة).

نصائح أخرى

وSystem.IO.Path.GetRandomFileName ()

ويمكنك استخدام فئة مسار في System.IO، من بين أمور أخرى، إنشاء أسماء الملفات والمجلدات بشكل عشوائي.

إذا كنت تستخدم قاعدة بيانات لموقع الويب الخاص بك، ثم يمكنك استخدام رقم وتزايد السيارات أو تسلسل لتوليد أسماء فريدة من نوعها للصور.

<ع> استخدام أوراكل كنت إنشاء التسلسل كما يلي؛

إنشاء تسلسل sequence_name     قيمة MINVALUE     قيمة MAXVALUE     تبدأ قيمة     INCREMENT BY قيمة     قيمة CACHE؛

للحصول على القيمة التالية في تسلسل استخدام nextval من التسلسل. على سبيل المثال

إنشاء تسلسل seq_user_id؛

وSELECT seq_user_id.NEXTVAL من المزدوجة؛

وINSERT INTO test_bed (USER_ID، class_type، room_location) VALUES (seq_user_id.NEXTVAL، "تحت الماء صناعة السلال '،' RM1205 ')؛

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top