【发布时间】:2011-08-30 08:04:06
【问题描述】:
我阅读的大部分文件在使用以下方法进行转换时得到了正确的时间:
// works great most of the time
private static DateTime convertToDateTime(System.Runtime.InteropServices.ComTypes.FILETIME time)
{
long highBits = time.dwHighDateTime;
highBits = highBits << 32;
return DateTime.FromFileTimeUtc(highBits + time.dwLowDateTime);
}
这里我在 Visual Studio 中有一个示例来说明这种方法有时是如何不起作用的,例如我将在我的计算机中显示实际文件和调试。所以恰好在我的调试中的文件是:
"A:\Users\Tono\Documents\Visual Studio 2010\Projects\WpfApplication4\WpfApplication4\obj\x86\Debug\App.g.cs"
这是我试图转换为 DateTime 的 FILETIME “顺便说一下,我需要 LastWriteTime”
在这里您可以从该文件中看到 dwHighDateTime = 30136437 以及 dwLowDateTime = -2138979250。
当我运行我的方法和其他技术时,我得到以下日期:
到目前为止,一切似乎都运行良好。但是,为什么当我在 Windows 中浏览并查找该特定文件时,我得到了不同的日期!?这是我看到文件属性时得到的日期:
为什么日期不匹配?我究竟做错了什么?
【问题讨论】:
-
你为什么要这么辛苦?好像你几乎重写了 FileInfo 类...msdn.microsoft.com/en-us/library/system.io.fileinfo.aspx
-
我不知道为什么 OP 这样做很难。当使用长路径名时,即超过 [MAX_LENGTH] = 260 字节的路径,您将需要重写大部分 System.IO 以使用非托管代码。在这里可以找到更多信息:blogs.msdn.com/b/bclteam/archive/2007/02/13/…
-
使用 FILETIME / GetFileTime 代替 FileInfo 有一些合法的场景:例如,如果您想获取有关已打开其句柄的文件的统计信息(并且在某些情况下无法通过 FileInfo 重新打开它)原因)
标签: c# datetime datetime-format filetime