0

我目前正在試圖編寫一個加載項來嘲笑Visual Studio的複製網站工具。這是因爲微軟的工具有一些我想改變的行爲。Visual Studio - >複製網站 - > RemoteSite1.xml - >什麼是TimeHigh/TimeLow?

但我希望它儘可能接近默認工具。默認工具使用緩存文件來識別更改並確定衝突情況的解決方案。

有以下的websitecache目錄相應的文件(C:\用戶[名] \ AppData \本地\微軟\ WebsiteCache [網站名稱]): PublishState.xml RemoteSite1.xml

在PublishState.xml的文件名是發EMAIL:[email protected]

<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 

我嘗試是確定日期和之間的相關性值,但我看不到任何關聯。如果「TimeHigh」或「TimeLow」確實表示任何具體內容,但也無法找到線索或解決方案,我也試圖谷歌。

我的問題:如何將TimeHigh/TimeLow-值轉換爲日期時間值並將其作爲對象?

回答

2

這是一個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) 
}; 
+0

謝謝,但這不工作(以下簡稱「合併」值似乎是錯誤的)。但隨着線索「FILETIME」,我能夠找到一個解決方案[在這裏](http://stackoverflow.com/questions/6083733/not-being-able-to-convert-from-filetime-windows-time-to -datetime-i-get-a-dif)(查看接受的答案) – Undercover1989 2015-02-26 15:23:36