2010-01-21 97 views
23

我確實有一個很奇怪的問題!我不知道問題是在框架,操作系統或者也許只是我,誤解的東西...令人難以置信的奇怪的文件創建時間問題

我有一個文件,這可能是很久以前創建的,我使用該文件,然後我想歸檔它,通過改變它的名字。然後我想在重命名之前創建一個與舊文件名稱相同的新文件。夠簡單!

令我感到困惑的問題是,新創建的文件出錯了「created」-timestamp!這是一個問題,因爲它是我想用來確定何時存檔和創建新文件的時間戳。

我創建了一個顯示問題的非常小的示例。要使示例工作,Files文件夾中必須有文件1.txt。此外,還必須及時設置文件屬性(使用其中一個工具,我使用Nomad.NET)。

static void Main(string[] args) 
    { 
     // Create a directory, if doesnt exist. 
     string path = Path.GetDirectoryName(Application.ExecutablePath) + "\\Files"; 
     Directory.CreateDirectory(path); 

     // Create/attach to the 1.txt file 
     string filename = path + "\\1.txt"; 
     StreamWriter sw = File.AppendText(filename); 
     sw.WriteLine("testing"); 
     sw.Flush(); 
     sw.Close(); 
     // Rename it... 
     File.Move(filename, path + "\\2.txt"); 

     // Create a new 1.txt 
     sw = File.AppendText(filename); 
     FileInfo fi = new FileInfo(filename); 
     // Observe, the old files creation date!! 
     Console.WriteLine(String.Format("Date: {0}", fi.CreationTime.Date)); 

     Console.ReadKey(); 
    } 
+2

最後,我通過創建文件(使用錯誤的/舊的時間戳)解決它,我通過設置FileInfo.CreationTime = DateTime.Now來「手動」更改它。 – kaze 2010-01-22 11:28:34

回答

27

這是一個神祕的「功能」迴歸到過去的Windows的結果。核心詳情請看這裏:

基本上,這是故意的。但它是可配置的,並且是當今大多數軟件中的一種時代錯誤。

認爲您可以先創建一個新的文件名,然後重命名old-> old.1,然後new-> old,它會「工作」。我不記得我們在幾年前遇到這種情況時所做的一切。

+0

謝謝,這正是我的問題。從未聽說過它。現在,我可以通過重命名爲臨時隨機名稱來找到解決方法。 – kaze 2010-01-21 13:19:20

8

我最近遇到了問題中描述的相同問題。在我們的情況下,如果我們的日誌文件超過一週,我們將其刪除並啓動一個新的日誌文件。但是,它一直保持自2008年以來創建的日期。

一個答案在這裏描述重命名舊文件,然後創建一個新的,希望拿起正確的創建日期。然而,這對我們來說是不成功的,它保持了舊的日期。

我們使用的是File.SetCreationTime方法,顧名思義,它很容易讓我們控制文件的創建日期,允許我們將其設置爲DateTime.Now。其餘的邏輯在事後正確運行。

2

File.SetCreationTime(「file」,DateTime.Now);