Fehlermeldung "Not a valid Win32 FileTime" beim Setzen der Creation Time einer Datei

In einem Projekt verwende ich den Aufruf

if (File.Exists(filePath))
{
    File.SetCreationTime(filePath, date);
}

Bei einem Kund trat der Fehler auf:

Not a valid Win32 FileTime.

Die Exception ist vom Typ System.ArgumentOutOfRangeException und der Fehler trat hier im Callstack auf:

at System.DateTime.ToFileTimeUtc()
at System.IO.File.SetCreationTimeUtc(String path, DateTime creationTimeUtc)

Also innerhalb von DateTime.ToFileTimeUtc. Hier ist der Quelltext der Funktion.

Ich nutze den Code im Kontext:

  1. Creation-Datum von Datei 1 lesen.
  2. Dieses gelesene Datum auf Datei 2 setzen.

Und eben dort kommt die Exception. Und nur bei einem Kunden.

Frage:

Was kann die Ursache sein und wie genau kann ich sie vermeiden?

Weitere Recherchen:

Anscheinend erzeugt folgender Aufruf diese Exception:

// Not a valid Win32 FileTime.
System.DateTime.MinValue.ToFileTime()

Es könnte also sein, dass das Creation-Datum von Datei 1 DateTime.MinValue zurück gibt, z.B. weil sie nicht vorhanden ist (so mache ich das auch in der von mir hier verwendeten ZetaLongPaths-Bibliothek).

Wenn das Creation-Datum von einer Datei DateTime.MinValue ist
und DateTime.MinValue ist diesem Zusammenhang eine UTC-Zeit ist
und der Kunde zum Beispiel in der USA lebt,
dann wird von der DateTime.MinValue noch mindestens 6 Stunden für die Ortszeit abgezogen,
dann ergibt „DateTime.MinValue - 6“ eine invalide Zeit.

1 Like

Das könnte eine heiße Spur sein!