如何在C#中创建随机图像名称?

时间:2010-05-12 08:18:07

标签: c# random filenames

当我添加图片时,我希望它创建一个新的随机文件名,因为如果你添加一个同名的图片,它就会覆盖。

8 个答案:

答案 0 :(得分:7)

这是一种内置方法Path.GetRandomFileName。它返回一个随机文件夹名称或文件名。

  

GetRandomFileName方法返回一个   密码学强,随机   可以用作a的字符串   文件夹名称或文件名。不像   GetTempFileName,GetRandomFileName   不创建文件。当。。。的时候   您的文件系统的安全性是   最重要的是,应该使用这种方法   而不是GetTempFileName。

如果您想使用自己的扩展程序(例如.jpg而不是已生成),则可以使用其他辅助方法Path.ChangeExtension

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

System.IO.Path.GetRandomFileName 获取保证唯一的文件名。

答案 1 :(得分:5)

如果您想保存图片,可以使用GUID作为文件名:

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

当我需要另一个文件扩展名而不是.tmp时,我总是这样做(当你通过GetTempFileName创建文件时会得到这些文件)。
当然你可以通过GetTempFileName创建文件,然后重命名它们,但是你必须再次检查是否存在具有新名称的文件......

答案 2 :(得分:4)

您可以生成Guid并将其用于您的文件名。虽然这意味着文件不是人类可读的,并且没有关于内容是什么的信息。

答案 3 :(得分:3)

您可以使用当前时间构建它。

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

上面的示例将使用年,月,日,小时,分钟,秒和分数秒来格式化当前时间。 (如果希望将其缩小为1,则可以使用较少的f指定秒的分数。)。


优点:

  • 它将按字母顺序排序列表中的创建时间自动排序。 (与Windows资源管理器中的默认排序一样。)
  • 它是人类可读的,并提供有关创建时间的有用信息。

缺点:

  • 如果这是一个Web应用程序(或其他类型的多线程进程),如果两个文件同时生成,则有两个文件获得相同名称的可能性很小。如果这是一个单线程EXE,这不是问题。

答案 4 :(得分:3)

使用GUID命名您的图像

对于C#,您可以使用:System.Guid.NewGuid().ToString()

答案 5 :(得分:1)

也许您正在寻找GetTempFileName

答案 6 :(得分:0)

我会选择awe。使用原始文件名+ DateTime.Now.ToString("yyyyMMddHHmmssffff");

答案 7 :(得分:0)

我也会使用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();
}

为您提供优质,可重复使用的解决方案。把它放到你的“我最伟大的时刻的集合” - 类库中,你很高兴。