0

1970年以降の現在の時刻にちなんでミリ秒単位でファイルに名前を付けたいと思います。

現時点では、カウンターがあり、新しいファイルが作成されるたびにカウンターをインクリメントしています。しかし、アプリが再起動すると、カウンターはゼロに戻り、ファイルを再度保存し始めるとファイルを上書きします。

ですから、時間を秒単位またはミリ秒単位で使用すれば、この問題は発生しないと考えていました。

だから私の質問は、WindowsMo​​bileでミリ秒単位で時間を取得する方法です。

これは、ファイル名を生成するために現在行っていることです。

string fileName = savedCounter + ".jpg";
4

6 に答える 6

6

あなたはダニを使うことができます

1つのティックは、100ナノ秒または1000万分の1秒を表します。1ミリ秒に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これは、人間にとって読みやすい場合があります(たとえば、デバッガーまたは分離ストレージエクスプローラーを使用)。

余談ですが、パフォーマンス上の理由から、1つのディレクトリにあまり多くのファイルを作成しないように注意してください-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を使用するか、さらに適切に使用して、現在のCounterをIsolatedStorageSettingsに保存します。その使いやすさ:http://msdn.microsoft.com/en-us/library/cc221360 (v = vs.95).aspx

于 2012-04-27T10:05:03.843 に答える
0

DateTimeの代わりにGuidを使用することをお勧めします。

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