Как создать случайное имя изображения в C #? - PullRequest
8 голосов
/ 12 мая 2010

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

Ответы [ 8 ]

7 голосов
/ 12 мая 2010

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

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

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

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

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

5 голосов
/ 12 мая 2010

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

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

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

4 голосов
/ 12 мая 2010

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

3 голосов
/ 12 мая 2010

Назовите ваше изображение, используя GUID

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

3 голосов
/ 12 мая 2010

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

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

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


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

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

Недостатки:

  • Если это веб-приложение (или другой тип многопоточного процесса), существует небольшая вероятность того, что два файла получат одно и то же имя, если будут созданы одновременно. Это не проблема, если это однопоточный EXE-файл.
1 голос
/ 12 мая 2010

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

0 голосов
/ 12 мая 2010

Я бы тоже пошел с решением 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 голосов
/ 12 мая 2010

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

...