4

DirectoryInfo.CreationTimeを使用して、ディレクトリが作成された日付を取得していますが、奇妙な日付が返されます{21/11/1617 0:00:00}

var directoryInfo = new DirectoryInfo("C:\\testFolder");
var lastWriteTime = directoryInfo.LastWriteTime; // correct value
var creationTime = directoryInfo.CreationTime; // Date = {21/11/1617 0:00:00}
var creationTimeUtc = directoryInfo.CreationTimeUtc; // Date = {21/11/1617 0:00:00}

何か案が?

更に:

NAS共有にあるフォルダー。一部のフォルダーは正しい値を返し、一部のフォルダーは次のテストを実行しませんでした。

  1. マシンを再起動し、データと時刻が正しく設定されていることを確認します
  2. 別のマシンからアプリケーションを実行する
  3. .NET4.0VS2010を使用してアプリケーションを再作成します
  4. さまざまなOSウィンドウからアプリケーションを実行する7

すべて同じ値を返します。ただし、フォルダのプロパティを選択すると、作成日は2008に設定されます。これはバグですか?

4

2 に答える 2

3

「奇妙な日」に光を当てることができます。

Windowsのファイル時間は1/1/1601に基づいています。

ファイル時間は、1601年1月1日午前12:00以降に経過した100ナノ秒間隔の数を表す64ビット値です。協定世界時(UTC)。システムは、アプリケーションがファイルを作成、アクセス、および書き込みするときにファイル時間を記録します。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724290(v=vs.85).aspx

ファイルシステムが16年のオフセットを報告しているように見えます(これは、呼び出しDirectoryInfoているクラスから継承します)。FileSystemInfoGetFileAttributesEx()

.Netラッパー

public DateTime CreationTimeUtc
{
    get{
        long fileTime = (long)((ulong)this._data.ftCreationTimeHigh << 32 | (ulong)this._data.ftCreationTimeLow);
        return DateTime.FromFileTimeUtc(fileTime);
    }
}

DateTime.FromFileTimeUtc1/1/1601に等しい値を追加します。

long ticks = fileTime + 504911232000000000L;
return new DateTime(ticks, DateTimeKind.Utc);

オフセット(16年)の意味がわかりません。何世紀にもわたって蓄積されたとしても、DSTエラーやうるう年には大きすぎるようです。

CreationTime両方がまったく同じ日付を返すのは独特だと思いCreationTimeUtcます(現地時間がUTCと同じでない限り)。

于 2013-03-27T03:56:18.957 に答える
0

CreationTimeのmsdnドキュメントでは、これを引き起こす可能性のある一連の問題について説明しています。

以下のこのリンクの備考セクションをチェックしてください

http://msdn.microsoft.com/en-IN/library/system.io.filesysteminfo.creationtime.aspx

更新されていないキャッシュ値である可能性があります。このために、Refreshメソッドを使用できます。コメントに示されているように、一部の古いプラットフォームでも問題が発生する可能性があります。

于 2013-03-27T02:55:04.280 に答える