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

时间:2010-01-21 12:35:15

标签: c# .net windows filesystems

我确实有一个非常奇怪的问题!我想知道问题是在框架中,操作系统还是仅仅是我,误解了一些事情......

我有一个文件,可能是很久以前创建的,我使用该文件,然后我想通过更改它的名称来存档它。然后我想在重命名之前创建一个与旧文件同名的新文件。够容易!

让我感到困惑的问题是,新创建的文件出错了“创建” - 时间戳!这是一个问题,因为它是我想用来确定何时存档和创建新文件的时间戳。

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

3 个答案:

答案 0 :(得分:27)

这是一个神秘的“功能”可以追溯到Windows的旧时代。核心细节如下:

基本上,这是故意的。但它是可配置的,并且在今天的大多数软件中都是不合时宜的。

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

答案 1 :(得分:8)

我最近遇到了问题中描述的同样问题。在我们的例子中,如果我们的日志文件超过一周,我们会删除它并开始一个新的。但是,它保持了自2008年以来创建的相同日期。

这里的一个答案描述了重命名旧文件然后创建一个新文件,希望获得正确的创建日期。然而,这对我们来说是不成功的,它仍旧保持旧日期。

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

答案 2 :(得分:2)

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