文件中的ASP.NET TimeDate标记被覆盖

时间:2018-05-11 18:21:00

标签: c# asp.net asp.net-mvc

我这里有这个代码,它接受64字符串并创建字节,然后我为这些字节创建一个文件名。

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应用程序在循环中调用这些代码行,有时yyyyMMddHHmmssffffff与循环中的上一项相同。我的问题是,如何使文件名更加独特,以免发生这种情况。

2 个答案:

答案 0 :(得分:4)

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

var uniquecode=Guid.NewGuid();
     var filePath = landingCells.jobNo + DateTime.Now.ToString("yyyyMMddHHmmssffffff")+uniquecode;

答案 1 :(得分:2)

使用基于日期的名称会将文件创建速率限制为系统时钟的频率(并且也不是线程安全),这就是当您完成循环迭代过快时看到重复文件名的原因。您有多种选择可以根据您的要求使其更加独特:

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

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