在多线程应用程序中获取唯一的文件名

时间:2010-07-02 09:41:04

标签: c# multithreading file unique

我需要在多线程应用程序中构建一个唯一的文件名,该文件序列化磁盘上的一些数据。 我可以使用什么方法来确保唯一的名称。 该应用程序之前没有多线程,并且正在使用Ticks。使用多个线程时,它失败的速度比我预期的要快得多。 我现在将CurrentThreadId添加到文件名中,应该这样做

string.Format("file_{0}_{1}.xml", DateTime.Now.Ticks, Thread.CurrentThread.ManagedThreadId)

有没有“聪明”的方法呢?

4 个答案:

答案 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值。