我需要生成一个带有 .csv 扩展名的唯一临时文件。
我现在做的是
string filepath = System.IO.Path.GetTempFileName().Replace(".tmp", ".csv");
但是,这并不能保证我的 .csv 文件是唯一的。
我知道我遇到冲突的机会非常低(特别是如果您认为我没有删除 .tmp 文件),但这段代码对我来说并不好。
当然,我可以手动生成随机文件名,直到最终找到一个唯一的文件名(这应该不是问题),但我很想知道其他人是否找到了解决这个问题的好方法。
保证是(统计上)唯一的:
string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".csv";
(引用关于碰撞概率的维基文章:
…一个人每年被陨石击中的风险估计为 170 亿分之一 [19],这意味着概率约为 0.00000000006(6 × 10-11),相当于创造几十个的几率一年内有数万亿个 UUID,并且有一个重复。换句话说,仅在接下来的 100 年每秒生成 10 亿个 UUID 之后,仅创建一个副本的概率约为 50%。如果地球上每个人都拥有 6 亿个 UUID,那么重复的概率约为 50%
编辑:另请参阅 JaredPar 的评论。