令人难以置信的奇怪的文件创build时间问题

我确实有一个很奇怪的问题! 我不知道这个问题是在框架,操作系统还是只是我,误解的东西…

我有一个很久以前就可以创build的文件,我使用该文件,然后通过更改文件名称来存档文件。 然后,我想创build一个新的文件,与旧文件具有相同的名称,在重命名之前。 够简单!

真让我困惑的问题是,新创build的文件错误的“创build” – 时间戳! 这是一个问题,因为它是我想用来确定何时归档和创build一个新文件的时间戳。

我创build了一个显示问题的非常小的示例。 要使示例工作,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(); } 

这是一个神秘的“功能”回到了Windows的旧时代的结果。 核心细节在这里:

  • Windows NT包含文件系统隧道功能

基本上,这是有意的。 但它是可配置的,在当今的大多数软件中是不合时宜的。

认为你可以先创建一个新的文件名,然后重命名old-> old.1,然后new-> old,它会“工作”。 我不记得我们在几年前遇到这种情况时所做的一切。

我最近遇到了问题中描述的同样的问题。 在我们的情况下,如果我们的日志文件比一个星期早,我们删除它并开始一个新的。 不过,自2008年以来一直保持相同的日期。

一个答案在这里描述重命名旧文件,然后创建一个新的,希望拿起适当的创建日期。 然而,这对我们来说是不成功的,它仍然保留着旧的日期。

我们使用的是File.SetCreationTime方法,顾名思义,它很容易让我们控制文件的创建日期,允许我们将其设置为DateTime.Now。 其余的我们的逻辑后来正确工作。

File.SetCreationTime(“file”,DateTime.Now);