C# 文件上的ASP.NET时间戳被覆盖

C# 文件上的ASP.NET时间戳被覆盖,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我这里有一段代码,它接受base64字符串并创建字节,接下来我为这些字节创建一个文件名 byte[] bytes = System.Convert.FromBase64String(landingCells.imageBytes); var filePath = landingCells.jobNo + DateTime.Now.ToString("yyyyMMddHHmmssffffff"); 接下来,我将保存这些字节: System.IO.File.WriteAllBytes("C:/ap

我这里有一段代码,它接受base64字符串并创建字节,接下来我为这些字节创建一个文件名

byte[] bytes = System.Convert.FromBase64String(landingCells.imageBytes);
var filePath = landingCells.jobNo + DateTime.Now.ToString("yyyyMMddHHmmssffffff");
接下来,我将保存这些字节:

System.IO.File.WriteAllBytes("C:/app/Images/" + filePath + ".jpg", bytes);

我遇到的问题是,我通过iOS应用程序在循环中调用这些代码行,有时YYYYMMDDHHMMSSFFFFF与循环中的上一项相同。我的问题是,如何使文件名更为唯一,这样就不会发生这种情况。

使用基于日期的名称会将文件创建速率限制在系统时钟频率范围内(而且也不是线程安全的),这就是为什么当您过快地完成循环迭代时,会看到重复的文件名。根据您的需求,您有几个选项可以使其更加独特:

  • 当日期与上次写入文件的日期相同时,向文件名添加递增计数器后缀
  • 将GUID合并到文件名中。这比计数器后缀可读性差,但即使在分布式系统中也能保证唯一性,并且不需要维护计数器
  • 将有关文件或其元数据的其他原始信息合并到名称中,当与日期组合时,该名称将是唯一的
  • 提出一些自定义名称生成算法,为每个(甚至重复的)输入生成唯一的名称。如何做到这一点取决于您在其中工作的域和处理的数据

我不确定你在构建什么样的应用程序,但值得重新评估你是否真的需要每秒将这么多的图像写入磁盘,如果你这样做了,视频是否会更好。限制写入可能不是一个坏主意,它还可以解决命名问题。

使用基于日期的名称会将文件创建速率限制在系统时钟频率范围内(而且也不是线程安全的),这就是为什么当您过快地完成循环迭代时,会看到重复的文件名。根据您的需求,您有几个选项可以使其更加独特:

  • 当日期与上次写入文件的日期相同时,向文件名添加递增计数器后缀
  • 将GUID合并到文件名中。这比计数器后缀可读性差,但即使在分布式系统中也能保证唯一性,并且不需要维护计数器
  • 将有关文件或其元数据的其他原始信息合并到名称中,当与日期组合时,该名称将是唯一的
  • 提出一些自定义名称生成算法,为每个(甚至重复的)输入生成唯一的名称。如何做到这一点取决于您在其中工作的域和处理的数据

我不确定你在构建什么样的应用程序,但值得重新评估你是否真的需要每秒将这么多的图像写入磁盘,如果你这样做了,视频是否会更好。限制写入可能不是一个坏主意,它还可以解决命名问题。

使用Guid.NewGuid()尝试此操作:


请使用Guid.NewGuid()尝试此操作:


可能使用GUID而不是日期戳?可能使用GUID而不是日期戳?
var uniquecode=Guid.NewGuid();
     var filePath = landingCells.jobNo + DateTime.Now.ToString("yyyyMMddHHmmssffffff")+uniquecode;