Как я создаю случайное название картинки в C#?

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

8
задан Peter Mortensen 29 November 2010 в 16:07
поделиться

8 ответов

Вы можете сгенерировать идентификатор Guid и использовать его для имени файла. Хотя это означало бы, что файлы не читаются человеком и не имеют информации о том, что такое контент.

4
ответ дан 5 December 2019 в 07:10
поделиться

Это встроенный метод Path.GetRandomFileName . Он возвращает случайное имя папки или имя файла.

Метод GetRandomFileName возвращает криптографически стойкую случайную строку, которую можно использовать как имя папки или имя файла. В отличие от GetTempFileName, GetRandomFileName не создает файл. Когда безопасность вашей файловой системы является первостепенной, этот метод следует использовать вместо GetTempFileName.

Если вы хотите использовать свое расширение (например, .jpg вместо сгенерированного), вы можете использовать другой вспомогательный метод Path.ChangeExtension :

string extension = ".jpg";
string fileName = Path.ChangeExtension(
    Path.GetRandomFileName(),
    extension
);

System.IO.Path. GetRandomFileName получает имя файла, которое гарантированно является уникальным .

7
ответ дан 5 December 2019 в 07:10
поделиться

Если вы хотите сохранить изображения, вы можете просто использовать GUID в качестве имени файла:

string filename = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".jpg");

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

5
ответ дан 5 December 2019 в 07:10
поделиться

Name your image using a GUID

Для C# вы можете использовать: System.Guid.NewGuid().ToString()

3
ответ дан 5 December 2019 в 07:10
поделиться

Вы можете построить его, используя текущее время.

string fileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".png";

Приведенный выше пример отформатирует текущее время, используя год, месяц, день, часы, минуты, секунды и доли секунды. (Доли секунды можно указать с меньшим количеством fs, если вы хотите уменьшить их до единицы).


Преимущества:

  • Автоматически сортирует по времени создания в списке, отсортированном по алфавиту. (Как сортировка по умолчанию в Проводнике Windows.)
  • Он читабелен и предоставляет полезную информацию о времени создания.

Недостатки:

  • Если это веб-приложение (или другой многопоточный процесс), существует (небольшая) вероятность того, что два файла получат одинаковое имя, если они будут созданы в одно и то же время. Это не проблема, если это однопоточный EXE.
3
ответ дан 5 December 2019 в 07:10
поделиться

Возможно, вы ищете GetTempFileName.

1
ответ дан 5 December 2019 в 07:10
поделиться

Я бы также выбрал решение GUID.

Вот код, который я бы использовал регулярно:

public static string GetRandomFileName(string extension)
{
    StringBuffer sb = new StringBuffer(Guid.NewGuid().ToString());
    if (!string.IsNullOrEmpty(extensions))
    {
        sb.Append(".");
        sb.Append(extension);
    }

    return sb.ToString();
}

Предоставит вам прекрасное решение для многократного использования. Поместите это в свою «коллекцию моих величайших моментов» - классную библиотеку, и вперед.

0
ответ дан 5 December 2019 в 07:10
поделиться

Я бы пошел с трепетом . Используйте исходное имя файла + DateTime.Now.ToString ("yyyyMMddHHmmssffff"); .

0
ответ дан 5 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: