Directory.Get(nicht ganz)LastWriteTime

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    Directory.Get(nicht ganz)LastWriteTime

    Hallo,

    Directory.GetLastWriteTime war bisher immer sehr praktisch für mich, aber nun bin ich auf ein Verzeichnis gestoßen, das wohl auch mal die jüngste Änderung nicht beibehält.
    Also erhalte ich quasi einen Verzeichniszustand, bei dem Directory.GetLastWriteTime ungleich der jüngsten Änderungszeit einer existierenden Datei ist.
    Ich schätze da wurde temporär etwas erzeugt und wieder gelöscht, kann das die GetLastWriteTime überschreiben?

    Deswegen suche ich es so raus,

    VB.NET-Quellcode

    1. dir.EnumerateFiles.Select(Function(x) x.LastWriteTime).Max

    aber vielleicht gibts was Besseres, er muss hier ja alle Dateien angucken, was je nachdem sehr viel Arbeit sein kann.

    Viele Grüße
    Wenn man davon absieht, dass Du das auch so schreiben kannst: dir.EnumerateFiles.Max(Function(x) x.LastWriteTime): Weißt Du denn wie knapp GetLastWriteTime und tatsächliche, davon abweichende Zeit auseinanderliegen? Geht es um Sekunden, Minuten, Stunden?
    Lass Dir mal nur die LastWriteTime der ersten Datei geben, vielleicht wird die Zeit dann für das Verzeichnis aktualisiert. Oder öffne das Verzeichnis mal testweise im Dateiexplorer, um zu sehen, ob dann die Verzeichniszeit stimmt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    In diesem Fall liegt die Zeit recht weit auseinander. Und ja im Explorer ist der Unterschied auch nachzuvollziehen...Das heißt da sind irgendwo wirklich Änderungen gewesen, nur jetzt nicht mehr zu sehen.
    Die jüngste Datei, die nun zu finden ist hat das Änderungsdatum 09.05.2022 15:50 --LINQ
    Das Verzeichnis selbst hat ein Änderungsdatum angegeben 10.05.2022 14:02 --GetLastWriteTime

    Du meinst wenn ich das LastWriteTime eines Files mit dem Programm auslese, dann ändert sich die Änderungszeit des Ordners? Das konnte ich so nicht feststellen
    Die LastWriteTime der ersten Datei ist nochmal ne andere, weil die Ordnung sich scheinbar nicht an den Änderungszeiten orientiert.
    Probier mal:

    VB.NET-Quellcode

    1. Dim DeinPfad = "D:\" '<-- hier Deinen Pfad eintragen
    2. Dim LastWriteTimeVorRefresh1 = IO.Directory.GetLastWriteTime(DeinPfad)
    3. Dim DeinVerzeichnis As New IO.DirectoryInfo(DeinPfad)
    4. Dim LastWriteTimeVorRefresh2 = DeinVerzeichnis.LastWriteTime
    5. DeinVerzeichnis.Refresh()
    6. Dim LastWriteTimeNachRefresh1 = IO.Directory.GetLastWriteTime(DeinPfad)
    7. Dim LastWriteTimeNachRefresh2 = DeinVerzeichnis.LastWriteTime
    8. MessageBox.Show(String.Join(Environment.NewLine,
    9. $"vor Refresh, Shared Method Time: {LastWriteTimeVorRefresh1.ToLongTimeString}",
    10. $"vor Refresh, Instance Method Time: {LastWriteTimeVorRefresh2.ToLongTimeString}",
    11. $"nach Refresh, Shared Method Time: {LastWriteTimeNachRefresh1.ToLongTimeString}",
    12. $"nach Refresh, Instance Method Time: {LastWriteTimeNachRefresh2.ToLongTimeString}"))
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Es gibt die beiden Varianten GetLastWriteTime und GetCreationTime.
    Wenn eine Datei kopiert oder verschoben (und damit neu angelegt) wird, ändert sich die LastWriteTime nicht zwingend, aber die CreationTime ist neu,
    Deshalb im Zweifel immer beide Werte testen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @VaporiZed
    Hat ein wenig gedauert bis der Zustand wieder so eingetreten ist wie beschrieben, aber habe jetzt mit deinem Code 4mal dasselbe Ergebnis, was auch die Zeit ist die im Explorer dann dran stand.
    Dieses ist aber weiterhin nicht mit der letzten geänderten Datei übereinstimmend.

    Wenn wieder eine Datei nun geändert wird dann löst sich der Zustand wieder auf, dann stimmen die Zeiten überein. Also ja da gehen einfach irgendwann Prozesse vor sich, die ich nicht sehen kann.

    Haudruferzappeltnoch schrieb:

    Wenn wieder eine Datei nun geändert wird dann löst sich der Zustand wieder auf
    Das könntest Du ja als Workaround forcieren, indem Du eine DummyDatei erstellst, Dir die von Dir gebrauchten Daten holst und die Datei danach sofort wieder löschst.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.