Убедитесь, что новый каталог создан

Мне нужно сделать каталоги в папке из многопоточного приложения. Каталог должен быть уникальным для каждого сеанса.

Теперь при создании файла вы можете использовать следующее, чтобы быть уверенным, что текущий поток создал файл.

New FileStream(FilePath, FileMode.CreateNew)

FileMode.CreateNew дает исключение, если файл уже существует.

Я могу сделать следующее. Но если 2 потока пытаются создать один и тот же каталог в одно и то же время. Теперь они получат оба одинаковых пути. Так как Directory.CreateDirectory не выдает исключение, если каталог уже существует.

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

.NET4 есть решение для этого?

1 ответ

Вы можете использовать глобальный счетчик как часть вашего пути к каталогу:

private static long counter = 0L;

var n = Interlocked.Increment(ref counter);
var path = 
    Path.Combine(
        root,
        Environment.MachineName, 
        n.ToString(CultureInfo.InvariantCulture), 
        "whatever", "else");
Другие вопросы по тегам