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)
};
我目前正在尝试编写一个模拟 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)
};