DirectoryInfo.createtime返回陌生日期

本文关键字:生日 日期 返回 createtime DirectoryInfo | 更新日期: 2023-09-27 18:06:06

我使用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年。这是臭虫吗?

DirectoryInfo.createtime返回陌生日期

我可以解释一下这个"奇怪的日期"。

Windows文件时间基于1/1/1601。

文件时间是一个64位的值,表示文件时间的个数从凌晨12点开始的100纳秒间隔1月1日1601协调世界时(UTC)。系统记录文件次数当应用程序创建、访问和写入文件时。

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

看起来您的文件系统正在向DirectoryInfo报告16年的偏移量(它继承自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相同)。

关于CreationTime的msdn文档讨论了一系列可能导致这种情况的问题

查看下面这个链接的备注部分

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

它可能是一个未更新的缓存值。为此,您可以使用Refresh方法。正如评论中所指出的,一些旧的平台也可能会给你带来麻烦。