我需要在多线程应用程序中构建一个唯一的文件名,该文件序列化磁盘上的一些数据。 我可以使用什么方法来确保唯一的名称。 该应用程序之前没有多线程,并且正在使用Ticks。使用多个线程时,它失败的速度比我预期的要快得多。 我现在将CurrentThreadId添加到文件名中,应该这样做
string.Format("file_{0}_{1}.xml", DateTime.Now.Ticks, Thread.CurrentThread.ManagedThreadId)
有没有“聪明”的方法呢?
答案 0 :(得分:9)
Guid.NewGuid()而不是线程ID呢?
string.Format("file_{0}_{1:N}.xml", DateTime.Now.Ticks, Guid.NewGuid())
通过将标记保留为名称的一部分,如果排序很重要,名称仍将是近似日期顺序。
{1: N }摆脱了guid中的花括号和短划线。
另外,请考虑使用DateTime.UtcNow.Ticks,以便在夏令时开始时保证增量滴答。
答案 1 :(得分:1)
根据您的需要,您可以尝试:
System.IO.Path.GetTempFileName();
这会在%temp%目录中创建一个唯一命名的临时文件。我想你可以在写入文件之前或之后将文件复制到目标位置。
答案 2 :(得分:0)
怎么样
Guid.NewGuid().ToString()
答案 3 :(得分:0)
要实际保留文件名,您必须立即创建文件并检查异常。
另一种选择是在您的文件名中包含Guid值。