我想以自 1970 年以来的当前时间(以毫秒为单位)命名我的文件。
目前我只有一个计数器,并在每个新文件后递增它。但是当应用程序重新启动时,计数器会回到零,当我再次开始保存文件时,我会覆盖这些文件。
所以我在想,如果我只使用秒或毫秒的时间,那么我不会有这个问题。
所以我的问题是如何在 windows mobile 上获得以毫秒为单位的时间。
这就是我目前正在做的生成我的文件名的方法。
string fileName = savedCounter + ".jpg";
我想以自 1970 年以来的当前时间(以毫秒为单位)命名我的文件。
目前我只有一个计数器,并在每个新文件后递增它。但是当应用程序重新启动时,计数器会回到零,当我再次开始保存文件时,我会覆盖这些文件。
所以我在想,如果我只使用秒或毫秒的时间,那么我不会有这个问题。
所以我的问题是如何在 windows mobile 上获得以毫秒为单位的时间。
这就是我目前正在做的生成我的文件名的方法。
string fileName = savedCounter + ".jpg";
您可以使用刻度
一个滴答表示一百纳秒或百万分之一秒。一毫秒内有 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);
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);
一些替代命名策略包括:
new DateTime(2012,1,1,0,0,0)
yyyyMMddhhmmss
来实现基于日期的字符串 - 这对于人类来说可能更容易阅读(例如,使用调试器或隔离存储资源管理器)除了 - 出于性能原因,请注意您不应该在一个目录中创建太多文件 - http://appangles.com/blogs/mickn/wp7/how-many-files-are-too-many-files-for- windows-phone-7-isolated-storage-performance/ - 在某些时候使用单个文件(例如数据库)是有意义的
您是否只是使用毫秒来生成唯一的文件名?如果是这样,使用 Guid.NewGuid().ToString() 可能会更好
即使您使用时间戳来生成文件名,如果您的应用程序的多个实例可以同时运行,那么仍然有可能发生冲突。无论您是否使用时间戳,您都可能需要执行以下操作:
事实上,这很可能是例程喜欢System.IO.Path.GetTempFileName()
做的事情。
使用 Time 甚至更好地使用您当前的架构,将当前计数器保存到 IsolatedStorageSettings。它易于使用: http: //msdn.microsoft.com/en-us/library/cc221360 (v=vs.95).aspx
最好使用 Guid 而不是 DateTime。
string fileName = System.Guid.NewGuid() + ".jpg";