FileInfo

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

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

    Hallo Zusammen,

    Kann mir jemand erklären, wieso bestimmte Werte eines
    FileInfo-Objects »FI« IMMER so sind, wie folgend aufgeführt!?

    »FI.LastWriteTime« KLEINER »FI.CreationTime« und
    »FI.LastAccessTime« IMMER GLEICH »FI.CreationTime«

    Beispiel:
    FI.CreationTime.ToString = "29.03.2017 06:44:51" # Erstellt 2017 !!!
    FI.LastWriteTime.ToString = "03.10.2004 10:34:14" # Letzte mal beschrieben 2004 ???
    FI.LastAccessTime.ToString = "29.03.2017 06:44:51" # Letzter Zugriff 2017

    Unlogisch:
    Der letzte Schreib-Zugriff kann doch nicht VOR dem Erstellungszeitpunkt der Datei liegen;
    und der letzte Zugriff auf die Datei ist doch nicht IMMER auch der Erstellungszeitpunkt!?

    Ich habe es bei vielen Dateien ausprobiert, immer das gleiche!
    Würde gern eine Erläuterung dazu; nur für mein Verständnis zur Sache!
    mfG DHB

    Ich meine:
    :P Es sollten nur ernstzunehmende Beiträge eingestellt werden!
    :( Beiträge, die nur deren Anzahl in die Höhe treiben sollen, stehlen Lesern deren Zeit und schenken nur Frust.
    ;) Wenn ein Autor sein Thema für erledigt hält, sollte er dies kurz als letzten Eintrag vermerken.
    8) Leser wüssten dann, dass hier weitere Beiträge nicht mehr sinnvoll sind.
    Also ich hab folgenden Test-Code, den ich mehrmals durchlaufen lasse, und mir die Debug-Ausgabe auskopiere:

    VB.NET-Quellcode

    1. Private Shared Sub Test()
    2. Dim name = "dabadu.txt"
    3. Dim fi = New FileInfo(name)
    4. If Not fi.Exists Then fi.WriteAllText(name, True)
    5. System.Diagnostics.Debug.Print($"CreationTime: {fi.CreationTime}, LastWriteTime: {fi.LastWriteTime}, LastAccessTime: {fi.LastAccessTime}")
    6. End
    7. End Sub

    Ergebnisse:

    Quellcode

    1. Initial, also zunächstmal nicht vorhanden:
    2. CreationTime: 01.01.1601 01:00:00, LastWriteTime: 01.01.1601 01:00:00, LastAccessTime: 01.01.1601 01:00:00
    3. Nochmal - nun vorhanden:
    4. CreationTime: 22.03.2020 15:50:05, LastWriteTime: 22.03.2020 15:50:05, LastAccessTime: 22.03.2020 15:50:05
    5. Nochmal, aus Spass:
    6. CreationTime: 22.03.2020 15:50:05, LastWriteTime: 22.03.2020 15:50:05, LastAccessTime: 22.03.2020 15:50:05
    7. nach angucken im VS:
    8. CreationTime: 22.03.2020 15:50:05, LastWriteTime: 22.03.2020 15:50:05, LastAccessTime: 22.03.2020 15:50:05
    9. Nach Ändern im VS:
    10. CreationTime: 22.03.2020 15:50:05, LastWriteTime: 22.03.2020 15:52:10, LastAccessTime: 22.03.2020 15:52:10

    Scheint mir alles richtig, und einen Unterschied zwischen LastAccessTime und LastWriteTime konnte ich so nicht erzeugen.
    Könnte mir vorstellen, wenn ein Prozess die Datei lesend öffnet und eine Sperre drauf setzt, dass sich dann LastAccessTime und LastWriteTime unterscheiden.
    @DHB Bei mir auch nicht:
    Eine schon länger existierende Datei:

    Eine eben erstellte und danach editierte Datei:

    Eine nicht existierende Datei:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @petaod
    Wenn du eine Datei kopierst, bleibt das alte Schreibdatum erhalten, aber das Erstelldatum wird neu erzeugt.


    Na, das erklärt ja schon mal meine 1. Frage - danke dafür!

    Bleibt nun noch die 2. Frage:
    Wieso entspricht der letzte Zugriff auf eine Datei auch IMMER dem Erstellungszeitpunkt!?

    @Erfinder des Rades
    Diese, meine 2. Frage hast Du versucht mit:

    Könnte mir vorstellen, wenn ein Prozess die Datei lesend öffnet und eine Sperre drauf setzt, dass sich dann LastAccessTime und LastWriteTime unterscheiden.

    zu beantworten - wäre eine Möglichkeit. Aber ich habe es jetzt mit einer ».docx«-Datei versucht, da »Word« seine Dateien beim Lesen immer sperrt - doch auch da ändert sich nichts! Also?

    Weiterhin:

    Scheint mir alles richtig, und…


    Was meinst damit?
    …dass Deine Angaben mit meinen übereinstimmen (das weiss ich natürlicH)
    oder
    …dass die Ergebnisse, die wir übereinstimmend (übrigens auch mit »RodFromGermany«) erhalten, richtig sind und eigentlich keiner Frage bedürfen.

    @Erfinder des Rades, @RodFromGermany, @petaod
    Euch Dreien zunächst mal recht herzlichen Dank für Eure Bemühungen.
    Zur 2. Frage werde ich noch ein bischen stöbern und, wenn ich eine befriedigende Antwort finde, es hier posten!
    Ist aktuell nicht so wichtig, aber gewusst hätt ich es schon ganz gerne.
    mfG DHB

    Ich meine:
    :P Es sollten nur ernstzunehmende Beiträge eingestellt werden!
    :( Beiträge, die nur deren Anzahl in die Höhe treiben sollen, stehlen Lesern deren Zeit und schenken nur Frust.
    ;) Wenn ein Autor sein Thema für erledigt hält, sollte er dies kurz als letzten Eintrag vermerken.
    8) Leser wüssten dann, dass hier weitere Beiträge nicht mehr sinnvoll sind.
    Die meisten Anwendungen, auch Word, verändern die Datei, indem sie das Original einlesen, im Memory verändern und das als neue Datei abspeichern, die die alte überschreibt.
    Der Lock ist da, damit die alte Datei nicht von einem anderen Benutzer zeitgleich verändert werden kann.
    De facto entsteht aber beim Abspeichern eine neue Datei.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod
    Tscha, dann wäre der von mir vorgenommene Test auch kein Argument gegen die Vermutung von »ErfinderDesRades« - ich dachte nur, so kann man die Verdacht entkräften. Ich bleibe dran!
    Na jedenfalls, danke nochmal!
    mfG DHB

    Ich meine:
    :P Es sollten nur ernstzunehmende Beiträge eingestellt werden!
    :( Beiträge, die nur deren Anzahl in die Höhe treiben sollen, stehlen Lesern deren Zeit und schenken nur Frust.
    ;) Wenn ein Autor sein Thema für erledigt hält, sollte er dies kurz als letzten Eintrag vermerken.
    8) Leser wüssten dann, dass hier weitere Beiträge nicht mehr sinnvoll sind.