在Windows中,删除文件并重新创建后,创建日期不会改变。

11

我有一个C#应用程序。它将日志记录在文件夹中。

以下是代码。

if (File.Exists(@"C:\EXT_LOG\LOG.txt"))
{
    File.Delete(@"C:\EXT_LOG\LOG.txt");
}

string Data = "xxxxx";
System.IO.StreamWriter file = new StreamWriter(@"C:\EXT_LOG\LOG.txt");
file.WriteLine(Data);
file.Dispose();
file.Close();

如果文件存在,我会删除它,并创建一个同名的文件。当我运行程序时,文件的创建日期不会改变。

我猜Windows任何管理器或任何文件表仍然包含该文件。

所以,当我删除文件时,我能否删除管理器或文件表的内容?


1
@GrantWinney,实际上您可以从Windows资源管理器中自行测试。1)找到一个现有的旧文件。2)删除它3)创建一个同名的新文件4)新文件将具有与旧文件相同的创建日期(假设您足够快地完成此操作)。请参见下面dotnetkid的答案。我自己也感到惊讶 :) - user585968
4
这么做是为了让保存更加安全,就像微软的Word文档一样。当应用程序自动保存时,它们不会覆盖原始文件,而是移动旧文件并创建一个新的副本文件。但是,新文件需要保留旧文件的属性,包括创建时间。你可以在文件名前看到带有~符号的临时文件,启用隐藏文件功能来查看这个过程。 - SreekanthGS
2个回答

6

在Windows中是这样工作的。我没有搜索过谷歌来了解为什么。然而,似乎可以使用C#中的System.IO.File.SetCreationTime方法设置文件的创建日期。

public static void SetCreationTime(
    string path,
    DateTime creationTime
)

来源:https://msdn.microsoft.com/zh-cn/library/system.io.file.setcreationtime(v=vs.100).aspx

这个方法可以设置指定文件的创建时间。如果成功,返回值为 true;如果不成功,返回值为 false。

注意:该方法只能在 NTFS 文件系统上运行。

以下是使用示例:
using System;
using System.IO;

class Test
{
    public static void Main()
    {
        // 获取当前目录下的 test.txt 文件
        FileInfo fi = new FileInfo("test.txt");

        // 将文件的创建时间设为 1985 年 8 月 16 日 10:42 PM。
        fi.CreationTime = new DateTime(1985, 8, 16, 22, 42, 0);
    }
}

4
正如dotnetkid所提到的,这是Windows系统的默认行为。这种行为的原因可以在这里找到: https://support.microsoft.com/zh-cn/kb/172190 - Don
2
保留的 KB 文章 [Windows NT 包含文件系统隧道功能] (https://web.archive.org/web/20150307194932/http://support.microsoft.com/kb/172190)。 - Mark G

0

这是我解决问题的方法:

File.WriteAllBytes(outFile, body);

File.SetCreationTimeUtc(outFile, DateTime.UtcNow);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接