我需要用.csv扩展名生成一个唯一的临时文件。
我现在做的是
string filepath = System.IO.Path.GetTempFileName().Replace(".tmp", ".csv");
但是,这并不能保证.csv文件是唯一的。
我知道发生碰撞的可能性非常低(特别是如果您考虑到我没有删除.tmp文件的话),但是这段代码对我来说不太好。
当然,我可以手动生成随机文件名,直到我最终找到一个唯一的文件名(这应该不是问题),但我很想知道其他人是否已经找到了处理这个问题的好方法。
唯一的:保证(统计上)唯一的:
string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".csv";
(引用维基上关于碰撞概率的文章:
...one's annual risk of being hit by a
meteorite is estimated to be one
chance in 17 billion [19], that means
the probability is about 0.00000000006
(6 × 10−11), equivalent to the odds of
creating a few tens of trillions of
UUIDs in a year and having one
duplicate. In other words, only after
generating 1 billion UUIDs every
second for the next 100 years, the
probability of creating just one
duplicate would be about 50%. The
probability of one duplicate would be
about 50% if every person on earth
owns 600 million UUIDs
编辑:请参阅JaredPar的评论。
根据我在网上找到的答案,我得到了我的代码如下:
public static string GetTemporaryFileName()
{
string tempFilePath = Path.Combine(Path.GetTempPath(), "SnapshotTemp");
Directory.Delete(tempFilePath, true);
Directory.CreateDirectory(tempFilePath);
return Path.Combine(tempFilePath, DateTime.Now.ToString("MMddHHmm") + "-" + Guid.NewGuid().ToString() + ".png");
}
正如Jay Hilyard的c#烹饪书,Stephen Teilhet在应用程序中使用临时文件中指出的那样:
无论何时需要存储,都应该使用临时文件
暂时供以后检索的信息。
您必须记住的一件事是删除这个临时文件
在创建它的应用程序终止之前。
如果它没有被删除,它将保留在用户的临时文件中
目录,直到用户手动删除它。