Функция GetTempFileName для каталога?

.NET Framework определяет метод System.IO.Path.GetTempFileName, который гарантирует, что созданное им временное имя файла будет уникальным. Насколько я могу судить, хотя, хотя и крайне маловероятно, это имя файла может быть идентично имени каталога по тому же пути, что означает, что я не могу предположить, что, взяв имя этого файла, удалив его и создав каталог с тем же именем, у меня будет каталог с уникальным именем в любом другом каталоге. Более того, я не могу указать путь, под которым GetTempFileName должен создать свой временный файл. Кажется, что не существует эквивалентной функции для GetTempFileName для каталогов.

Существует ли эквивалент GetTempFileName для создания уникального каталога? Если нет, то какой лучший способ создать уникальный каталог в указанном месте (т.е. Указать путь, по которому нужно создать уникальный каталог)?

Ответы

Ответ 1

Вы можете использовать Guid.NewGuid().ToString() для этой задачи.

Ответ 2

Guid работает, но если вы хотите более короткое имя каталога (формат 8.3), вы можете использовать GetRandomFileName():

    public static string GetRandomTempPath()
    {
        var tempDir = System.IO.Path.GetTempPath();

        string fullPath;
        do
        {
            var randomName = System.IO.Path.GetRandomFileName();
            fullPath = System.IO.Path.Combine(tempDir, randomName);
        }
        while (Directory.Exists(fullPath));

        return fullPath;
    }

Ответ 3

string basePath = @"c:\test\";    // or use Path.GetTempPath

string tempPath;
do
{
    tempPath = Path.Combine(basePath, Guid.NewGuid().ToString("N"));
} while (Directory.Exists(tempPath));

try
{
    Directory.CreateDirectory(tempPath);
}
catch
{
    // something went wrong!
}

Ответ 4

Вы можете создать уникальное имя с помощью Guid.