2011-08-22 68 views
0

C#精簡版6.5新增功能。我試圖將文件的日期時間設置爲與實際系統時間相差5小時的文件。我這樣做只是這個創建文件:C#P /調用屬性

 FileStream fs= File.Create(name); 

只是在做這個創建日期是超前5小時...如果我嘗試設置CREATIONTIME我得到一個編譯錯誤說屬性爲只讀,嚴重?

 FileInfo fi = new FileInfo(name); 
     fi.CreationTime = date; 

所以我的問題是,因爲我是新來的C#你如何獲得CE框架中的「只讀」屬性?我看到提及P/Invoke,但似乎僅適用於方法而不適用於屬性。任何人都可以給出一個快速演示如何做到這一點?

我已經試過這solution,仍然可以得到文件寫入UTC即使我把它當前的本地時間

+2

考慮*防止*問題,而不是「修復」它。我首先回答以下問題:在您的時區,UTC的偏移量是多少? –

+0

我在中央系統時區設置爲中央,所以不知道它爲什麼創建文件並將其設置爲UTC。 – JPM

回答

1

我只是跑這樣的:

[MTAThread] 
static void Main() 
{ 
    var name = "\\foo.txt"; 
    var info = new FileInfo(name); 
    using (info.Create()) { } 
    info.Refresh(); 
    var createTime = info.CreationTime; 
    var now = DateTime.Now; 
    var delta = now - createTime; 
    Debug.WriteLine(delta.ToString()); 
} 

,並得到這樣的輸出:

00:00:00.0140000

這似乎是正確的我。

+0

調試輸出中的顯示時間正確,但是當我使用Windows文件資源管理器查看創建時間時,日期再次比我的本地時間早5小時。 – JPM

+0

所以文件資源管理器是「bug」。它顯示UTC時間,而不是當地時間。 – ctacke

+0

大聲笑或文件瀏覽器是正確的,行政長官正在翻譯實際日期...誰知道在這一點上? – JPM

0

不能修改一個文件的創建時間。創建文件時,它只設置一次而已。 如果你願意使用P/Invoke來設置時間,你可以看看這個類似的問題 - c# - Change file LastWriteDate in Compact Framework

不過,你應該解決問題的根源。如果文件創建時間有問題,我會考慮檢查您系統的時間設置(包括時區)。

+0

是的,我試過這種方法,它不起作用,所以我再次問它,所以你可以請求在我的問題上取消投票嗎? – JPM