Генерация уникального имени файла в C#

Иконка Файл

В этой статье я покажу разные методы генерации уникального имени файла в C#. Примером когда вам может это понадобиться является хорошая практика изменения имени файла загружаемого пользователем на сервер.

Итак нам надо программно сгенерировать уникальное и к тому же случайное имя файла. Есть несколько способов как можно это сделать.

Использование класса System.Guid

Это наиболее рекомендуемый способ генерации случайного идентификатора в C#. Мы можем использовать этот же подход для генерации случайного имени файла. К тому же этот способ генерации уникальной строки является сравнительно быстрым.

В следующем примере кода показано, как получить уникальную строку с помощью класса Guid и использовать ее для формирования имени файла:

static void Main(string[] args)
{
    string fileName = String.Format(@"{0}.txt", System.Guid.NewGuid());
    Console.WriteLine(fileName);
    Console.ReadLine();
}

А вот пример сгенерированного имени файла:

4cb965e7-efab-4280-a7f4-ee4899c4f24c.txt

Использование метода Path.GetRandomFileName()

Этот метод можно использовать когда вам не важно какое расширение будет иметь файл. Метод GetRandomFileName() вернет имя файла с расширением. Расширение будет иметь 3 символа, а само имя файла 8. К тому же, все символы будут допустимыми для имени файла, так что мы можем быть уверены в результате.

Пример использования метода GetRandomFileName():

static void Main(string[] args)
{
    string fileName = System.IO.Path.GetRandomFileName();
    Console.WriteLine(fileName);
    Console.ReadLine();
}

Результат получим примерно такой:

yo3nys2x.hcg

Внутри себя метод Path.GetRandomFileName() получает случайные байты из «криптографически правильного» генератора случайных чисел RNGCryptoServiceProvider. А потом он использует побитовые И чтобы заполнить StringBuilder символами основанными на этих байтах.

Использование временного штампа

Еще одним распространенным способом генерации уникального имени файла является так называемый временной штамп (Timestamp). Временной штамп это не более чем простая комбинация текущего года, месяца, дня и времени с точностью до секунды.

На практике имя файла не составляется из одного только штампа, так как это не дает достаточной уникальности. Чаще всего он используется как префикс или постфикс к чему то другому, например, уникальному идентификатору или оригинальному имени файла.

Ниже показан пример комбинации Guid и временной метки:

static void Main(string[] args)
{
    string fileName = String.Format("Thumbnail_{0}_{1}.jpg",
        DateTime.Now.ToString("yyyyMMddHHmmssfff"), Guid.NewGuid());
    Console.WriteLine(fileName);
    Console.ReadLine();
}

Результат вывода:

Thumbnail_20130716204424500_30b80974-d857-429c-bab2-aa1f00740db5.jpg

Как видите, очевидным плюсом добавления временного штампа является то, что из названия файла сразу видно когда он был создан.

Надеюсь указанные подходы для генерации уникального имени файла будут вам полезными. Если вы знаете еще какие то хорошие методы, то не стесняйтесь написать о них в комментариях.

2 комментариев

  1. Андрей:

    Спасибо, очень понравилось, в тему!!!

  2. Vi:

    Большое спасибо! Как раз то что нужно)))

Добавить комментарий для Андрей Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>