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. 使用 .NET 4.0 VS2010 重新创建应用程序
  4. 从不同的操作系统 windows 7 运行应用程序

全部返回相同的值。但是,如果我选择文件夹属性,则创建日期设置为 2008。这是一个错误吗?

4

2 回答 2

3

我可以对“奇怪的约会”有所了解。

Windows 文件时间基于 1601 年 1 月 1 日。

文件时间是一个 64 位值,表示自协调世界时间 (UTC) 1601 年 1 月 1 日凌晨 12:00 以来经过的 100 纳秒间隔数。当应用程序创建、访问和写入文件时,系统会记录文件时间。

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

看起来您的文件系统报告了一个 16 年的偏移量DirectoryInfo(它继承自FileSystemInfo调用 的类GetFileAttributesEx())。

.Net 包装器

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

DateTime.FromFileTimeUtc添加一个等于 1/1/1601 的值:

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

我找不到偏移量(16 年)的任何意义。DST 错误或闰年似乎太大了,甚至是几个世纪以来累积的。

我确实认为两者都返回完全相同的日期是很奇怪CreationTimeCreationTimeUtc(除非您的当地时间与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 回答