Visual Studio -> 复制网站 -> RemoteSite1.xml -> 什么是 TimeHigh / TimeLow?

Visual Studio -> Copy WebSite -> RemoteSite1.xml -> What is TimeHigh / TimeLow?

我目前正在尝试编写一个模拟 Visual Studio 的复制网站工具的加载项。这是因为 Microsoft 的工具有一些我想更改的行为。

但我希望它尽可能接近默认工具。默认工具使用缓存文件来识别更改并确定冲突情况的解决方案。

websitecache-目录(c:\Users[Username]\AppData\Local\Microsoft\WebsiteCache[Website-Name])中有如下对应文件: PublishState.xml RemoteSite1.xml

在 PublishState.xml 中,文件名是列表:

<LocalFile>
    <FileId>2828</FileId>
    <RelativePath>Test.aspx</RelativePath>
</LocalFile>

在 RemoteSite1.xml 中,时间戳 (?) 或存储的任何内容:

<FileModifiedTimes>
    <FileId>2828</FileId>
    <LocalTimeHigh>30429237</LocalTimeHigh>
    <LocalTimeLow>-47918156</LocalTimeLow>
    <RemoteTimeHigh>30429237</RemoteTimeHigh>
    <RemoteTimeLow>-47918156</RemoteTimeLow>
</FileModifiedTimes>

我在特定时刻制作了一些文件并记录了日期和值(德语日期格式 = dd.MM.yyyy hh:mm):

Date (file-creation) LocalTimeHigh  LocalTimeLow
24.02.2015 14:15     30429236       116508521
24.02.2015 14:25     30429237       1248929358
24.02.2015 14:27     30429237       -1558459195
24.02.2015 14:30     30429237       -47918156

我试图确定日期和值之间的相关性,但我看不到任何相关性。我也尝试 google 如果 "TimeHigh" 或 "TimeLow" 确实意味着任何特定的东西,但也找不到线索或解决方案。

我的问题:如何将 TimeHigh/TimeLow-values 转换为日期时间值并与之相反?

它是 System.Runtime.InteropServices.ComTypes.FILETIME 结构的序列化。

您可以使用如下代码片段转换为 DateTime:

using System.Runtime.InteropServices.ComTypes;

FILETIME filetime = new FILETIME {
    dwHighDateTime = 30429237,
    dwLowDateTime = 116508521
};

long combined = ((long)filetime.dwHighDateTime << 32) | filetime.dwLowDateTime;
DateTime dt = DateTime.FromFileTimeUtc(combined); 
// or use FromFileTime() for local timezone

long timestamp = dt.ToFileTimeUtc();
FILETIME backAgain = new FILETIME {
    dwHighDateTime = (int)(timestamp >> 32), // drop lower 32 bits
    dwLowDateTime = (int)(timestamp & 0xffffffff)
};