Search code examples
c#.netfilerandomfilenames

Probability of already existing file System.IO.Path.GetRandomFileName()


Recently I got the exception:

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

This was the result of the following code I used for generating file names:

Path.Combine(Path.GetTempPath(), DateTime.Now.Ticks + ".xlsx");

After realising that it is possible to create two files in one Tick, I changed the code to:

Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + ".xlsx");

But I am still wondering what is the probability of the above exception in the new case?


Solution

  • Internally, GetRandomFileName uses RNGCryptoServiceProvider to generate 11-character (name:8+ext:3) string. The string represents a base-32 encoded number, so the total number of possible strings is 3211 or 255.

    Assuming uniform distribution, the chances of making a duplicate are about 2-55, or 1 in 36 quadrillion. That's pretty low: for comparison, your chances of winning NY lotto are roughly one million times higher.