确保创建新目录

时间:2016-07-13 09:48:30

标签: .net multithreading system.io.directory

我需要在多线程应用程序的文件夹中创建目录。 每个会话的目录都必须是唯一的。

现在创建文件时,您可以使用以下内容,以确保当前线程创建了该文件。

New FileStream(FilePath, FileMode.CreateNew)

如果文件已存在,FileMode.CreateNew会发出异常。

我可以做以下事情。但是如果2个线程试图在同一时间创建相同的目录。 他们现在将获得相同的路径。因为如果目录已存在,Directory.CreateDirectory不会抛出异常。

    If Not Directory.Exists(DirPath) Then
        Directory.CreateDirectory(DirPath)
    End If

.NET4有解决方案吗?

1 个答案:

答案 0 :(得分:2)

您可以将全局计数器用作目录路径的一部分:

private static long counter = 0L;

var n = Interlocked.Increment(ref counter);
var path = 
    Path.Combine(
        root,
        Environment.MachineName, 
        n.ToString(CultureInfo.InvariantCulture), 
        "whatever", "else");