dotnet/runtime

Unix: LastWriteTime doesn't return correct value when is updated too fast

Open

#55 951 ouverte le 19 juil. 2021

Voir sur GitHub
 (4 commentaires) (0 réactions) (0 assignés)C# (5 445 forks)batch import
area-System.IOhelp wantedneeds-further-triageos-linux

Métriques du dépôt

Stars
 (17 886 stars)
Métriques de merge PR
 (Merge moyen 12j 11h) (661 PRs mergées en 30 j)

Description

Description

static void Main(string[] args)
{
    string fileName = Path.GetRandomFileName();
    File.Create(fileName).Dispose();
    Console.WriteLine("File created.");
    Console.WriteLine($"LastWriteTime: {File.GetLastWriteTime(fileName):o}");
    Console.WriteLine($"LastWriteTimeUtc: {File.GetLastWriteTimeUtc(fileName):o}");

    File.WriteAllText(fileName, "v1.1");
    Console.WriteLine();
    Console.WriteLine("File updated 1.");
    Console.WriteLine($"LastWriteTime: {File.GetLastWriteTime(fileName):o}");
    Console.WriteLine($"LastWriteTimeUtc: {File.GetLastWriteTimeUtc(fileName):o}");

    Console.WriteLine();
    Console.WriteLine($"Current time: {DateTime.Now:o}");
    Console.WriteLine($"Current time: {DateTime.UtcNow:o}");

    File.WriteAllText(fileName, "v1.2");
    Console.WriteLine();
    Console.WriteLine("File updated 2.");
    Console.WriteLine($"LastWriteTime: {File.GetLastWriteTime(fileName):o}");
    Console.WriteLine($"LastWriteTimeUtc: {File.GetLastWriteTimeUtc(fileName):o}");
}

Prints:

File created.
LastWriteTime: 2021-07-19T11:33:14.5400000-07:00
LastWriteTimeUtc: 2021-07-19T18:33:14.5400000Z

File updated 1.
LastWriteTime: 2021-07-19T11:33:14.5600000-07:00
LastWriteTimeUtc: 2021-07-19T18:33:14.5600000Z

Current time: 2021-07-19T11:33:14.5767122-07:00
Current time: 2021-07-19T18:33:14.5767587Z

File updated 2.
LastWriteTime: 2021-07-19T11:33:14.5600000-07:00
LastWriteTimeUtc: 2021-07-19T18:33:14.5600000Z

Note how after the second File.WriteAllText the LastWriteTime is the same as the first and the DateTime.Now in between is larger.

I see this behavior on WSL2 Ubuntu, but it probably affects any Unix. This works correctly on Windows.

Regression?

No

Other information

Related issues: https://github.com/dotnet/runtime/issues/26964 https://github.com/dotnet/runtime/issues/18870

Guide contributeur