如何在.NET中创建12个字符长的随机文件夹名称

ak3*_*t0n 4 .net base64 guid auto-generate

我想在我的网站上创建随机文件夹名称来存储图像和缩略图,但是我没有使用生成的guid的完整版本,而是考虑使用它的一部分,可能只是前8个字符,可能还有base64编码它.我担心可能的碰撞.

有人能指出我是否是一个好主意的正确方向?如果我想将名称保留在一定数量的字符下,是否有可以使用的替代解决方案?

更新:我试图远离path.GetRandomFileName,因为它使用原始guid并且它不是12个字符长...

Jon*_*eet 13

为什么不只是使用这样的东西,并循环,直到你可以创建文件没有冲突?

 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);
 }
Run Code Online (Sandbox Code Playgroud)

传递RNG的原因是为了避免在不使用静态RNG(非线程安全)的情况下在方法中创建新RNG(在快速连续调用时重复)的典型问题.

另一种方法是使用单个静态只读RNG,并GenerateName通过锁定序列化调用.

重点是,你不知何故生成一个随机名称,你只是继续尝试创建具有随机名称的文件,直到你成功为止,这很可能很快发生(12个字符[AZ 0-9]给出4,738,381,338,321,616,896种可能的组合).


bsn*_*eze 9

System.IO.Path.GetRandomFileName()