DirectoryInfo.CreationTime返回奇怪的日期

时间:2013-03-27 00:59:17

标签: c# .net-3.5

我正在使用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. 从不同的操作系统窗口7运行应用程序
  5. All返回相同的值。但是,如果我选择文件夹属性,则创建日期设置为2008。 这是一个错误吗?

2 个答案:

答案 0 :(得分:3)

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

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

  

文件时间是一个64位值,表示数量   自上午12:00起经过的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相同)是特殊的。

答案 1 :(得分:0)

关于CreationTime的msdn文档讨论了一系列可能导致此问题的问题

查看以下链接的备注部分

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

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