我需要在多线程应用程序的文件夹中创建目录。 每个会话的目录都必须是唯一的。
现在创建文件时,您可以使用以下内容,以确保当前线程创建了该文件。
New FileStream(FilePath, FileMode.CreateNew)
如果文件已存在,FileMode.CreateNew
会发出异常。
我可以做以下事情。但是如果2个线程试图在同一时间创建相同的目录。
他们现在将获得相同的路径。因为如果目录已存在,Directory.CreateDirectory
不会抛出异常。
If Not Directory.Exists(DirPath) Then
Directory.CreateDirectory(DirPath)
End If
.NET4有解决方案吗?
答案 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");