0

我想以自 1970 年以来的当前时间(以毫秒为单位)命名我的文件。

目前我只有一个计数器,并在每个新文件后递增它。但是当应用程序重新启动时,计数器会回到零,当我再次开始保存文件时,我会覆盖这些文件。

所以我在想,如果我只使用秒或毫秒的时间,那么我不会有这个问题。

所以我的问题是如何在 windows mobile 上获得以毫秒为单位的时间。

这就是我目前正在做的生成我的文件名的方法。

string fileName = savedCounter + ".jpg";
4

6 回答 6

6

您可以使用刻度

一个滴答表示一百纳秒或百万分之一秒。一毫秒内有 10,000 个滴答声。

DateTime unixEpoch = new DateTime(1970, 1, 1);
DateTime currentDate = DateTime.Now;
long totalMiliSecond = (currentDate.Ticks - unixEpoch.Ticks) /10000;
Console.WriteLine(totalMiliSecond);
string fileName = string.Concat(totalMiliSecond,".jpg");
Console.WriteLine(fileName);
于 2012-04-27T09:50:41.910 回答
2

DateTime.UtcNow为您提供当前的 Utc 时间

new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc)给你1970

所以你可以使用:

var savedCounter = Math.Round((DateTime.UtcNow - new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc)).TotalSeconds);

一些替代命名策略包括:

  • 鉴于您的应用程序在 1970 年左右的副本并不多,您可能可以使用基准日期,例如new DateTime(2012,1,1,0,0,0)
  • 您还可以使用 DateTime.ToString 格式yyyyMMddhhmmss来实现基于日期的字符串 - 这对于人类来说可能更容易阅读(例如,使用调试器或隔离存储资源管理器)

除了 - 出于性能原因,请注意您不应该在一个目录中创建太多文件 - http://appangles.com/blogs/mickn/wp7/how-many-files-are-too-many-files-for- windows-phone-7-isolated-storage-performance/ - 在某些时候使用单个文件(例如数据库)是有意义的

于 2012-04-27T09:38:22.767 回答
2

您是否只是使用毫秒来生成唯一的文件名?如果是这样,使用 Guid.NewGuid().ToString() 可能会更好

于 2012-04-27T09:48:38.543 回答
0

即使您使用时间戳来生成文件名,如果您的应用程序的多个实例可以同时运行,那么仍然有可能发生冲突。无论您是否使用时间戳,您都可能需要执行以下操作:

  1. 将计数器初始化为 0
  2. 为文件生成一个名称,将计数器合并到其名称中。
  3. 尝试创建文件,打开它以进行独占 R/W 访问,并要求该文件不存在。
  4. 如果文件创建由于某种原因失败,请增加计数器并重复步骤 2-4。

事实上,这很可能是例程喜欢System.IO.Path.GetTempFileName()做的事情。

于 2012-04-27T09:40:22.023 回答
0

使用 Time 甚至更好地使用您当前的架构,将当前计数器保存到 IsolatedStorageSettings。它易于使用: http: //msdn.microsoft.com/en-us/library/cc221360 (v=vs.95).aspx

于 2012-04-27T10:05:03.843 回答
0

最好使用 Guid 而不是 DateTime。

string fileName = System.Guid.NewGuid() + ".jpg";
于 2015-09-06T06:10:43.133 回答