已有文件System.IO.Path.GetRandomFileName()的概率

gyo*_*fov 4 .net c# random filenames file

最近我得到了例外:

Message:
System.IO.IOException: The file 'C:\Windows\TEMP\635568456627146499.xlsx' already exists.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
Run Code Online (Sandbox Code Playgroud)

这是我用于生成文件名的以下代码的结果:

Path.Combine(Path.GetTempPath(), DateTime.Now.Ticks + ".xlsx");
Run Code Online (Sandbox Code Playgroud)

在意识到可以在一个Tick中创建两个文件之后,我将代码更改为:

Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + ".xlsx");
Run Code Online (Sandbox Code Playgroud)

但我仍然想知道新案件中上述例外的可能性是多少?

das*_*ght 11

在内部,GetRandomFileName用于RNGCryptoServiceProvider生成11个字符(名称:8 + ext:3)字符串.该字符串表示基数为32的编码数字,因此可能的字符串总数为32 11或2 55.

假设均匀分布,复制的机会大约是2 -55,或者是36万亿分之一.这相当低:相比之下,你赢得纽约乐透的机会大约高出一百万倍.