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

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

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

4 ответов


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


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;
    }

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!
}

вы можете создать уникальное имя с Guid.