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

kaz*_*aze 24 .net c# 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();
    }
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 28

这是一个神秘的"功能"回到过去的Windows的结果.核心细节如下:

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

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


小智 9

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

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

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