Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   NTFS, FileAge liefert nicht das neue Geändert-Datum, sondern das alte Geändert-Datum (https://www.delphipraxis.net/177657-ntfs-fileage-liefert-nicht-das-neue-geaendert-datum-sondern-das-alte-geaendert-datum.html)

hoika 19. Nov 2013 13:57

NTFS, FileAge liefert nicht das neue Geändert-Datum, sondern das alte Geändert-Datum
 
Hallo #,

anders konnte ich es nicht ausdrücken.
Ich mache folgendes.

Doc-Datei aus DB holen
Änderungsdatum merken (FileAge, noch das mit dem einen Parameter)
Word (per Ole) öffnen, Doc-Datei öffnen
in Word ändern, Speichern
neues Geändert-Datum mit dem gemerkten vergleichen
und bei Änderung zurück in die DB

Problem (beim Kunden, unter XP-SP3):
Hat er 2 Word offen, wird das Geändert-Datum nicht aktualisiert,
ich bekomme nicht mit, dass sich was geändert hat !!!

NTFS hat ja dieses "delayed write of last access time",
aber das hat ja nichts mit dem Geändert-Datum zu tun, oder ?

Kennt jemand das Problem/Links, die mein Problem bestätigen ?

Danke

Heiko

baumina 19. Nov 2013 14:19

AW: NTFS, FileAge liefert nicht das neue Geändert-Datum, sondern das alte Geändert-Da
 
Nur dass ich dein Problem richtig verstehe. Du schaust mit deinem Programm via Timer laufend in das Verzeichnis, in dem sich die Worddatei befindet und vergleichst das Geändert-Datum der Worddatei mit deinem gemerkten Datum, aber wenn du im Explorer nachschaust ändert sich das Datum nicht, wenn in Word "speichern" gedrückt wurde?

himitsu 19. Nov 2013 14:47

AW: NTFS, FileAge liefert nicht das neue Geändert-Datum, sondern das alte Geändert-Da
 
Bei uns wird sowas auch gemacht, aber bisher hat sich noch niemand diesbezüglich beschwert.
Kann aber auch sein, daß die immer nur eine Instanz offen haben.

Bei uns läuft die Schleife so lange, bis das programm den zugriff beendet, aber z.B. durch OpenOffice haben wir da Probleme bekommen.
MS office hält die Datei die ganze zeit geöffnet und man bekommt mit wenn es fertig ist, während OO das nur kurz beim Lesen öffnet.

Drum hatte ich dann zuletzt noch eine Schleife vorgelagert, welcher misst, ob die Datei eine gewisse Mindestzeit offen ist
und ich zeige dem Benutzer einen Wartedialog an, wo er auch nochmal manuell die Wahl hat, ob die Datei wieder ins Programm zurückgespeichert werden soll. (egal wie der Status vom Änderungsdatum aussieht)
> Also neben der "automatischen" Erkennung auch nochmal manuell, da einfch immer irgendwelche Probleme möglich sind.



Ach ja, das Datum der letzten Änderung wird scheinbar erst geändert/gespeichert, wenn das letzte Dateihandle weg ist, oder wenn man irgendwie einen Refresh hinbekommt. (z.B. beim zweiten oder dritten mal auf F5 drücken, im Explorer)

hoika 19. Nov 2013 16:48

AW: NTFS, FileAge liefert nicht das neue Geändert-Datum, sondern das alte Geändert-Da
 
Hallo,

Nein, kein Timer, bei OLE gibt es ein AppQuit-Event.
Wenn Word zu ist, prüfe ich über den Vergleich der beiden Datumswerte,
ob der Nutzer überhaupt was geändert hat.
Nur dann kommt ein Fenster zum Überschreiben bzw. Neu in die DB packen.

Dumm nur, dass mir Windows das alte Datum zurückgibt.


Ich kann das hier nicht nachstellen,
hatte es aber beim Kunden gesehen.


Heiko

DeddyH 19. Nov 2013 17:29

AW: NTFS, FileAge liefert nicht das neue Geändert-Datum, sondern das alte Geändert-Da
 
Zitat:

Zitat von hoika (Beitrag 1236599)
Wenn Word zu ist, prüfe ich über den Vergleich der beiden Datumswerte,
ob der Nutzer überhaupt was geändert hat.

Könnte man dazu nicht auch das Archiv-Atribut verwenden?

Sir Rufo 19. Nov 2013 17:58

AW: NTFS, FileAge liefert nicht das neue Geändert-Datum, sondern das alte Geändert-Da
 
Ich würde einen Hash-Wert von dem Dateiinhalt erzeugen lassen und damit vergleichen. Das sollte immer funktionieren

Dalai 19. Nov 2013 18:11

AW: NTFS, FileAge liefert nicht das neue Geändert-Datum, sondern das alte Geändert-Da
 
Zitat:

Zitat von Sir Rufo (Beitrag 1236605)
Ich würde einen Hash-Wert von dem Dateiinhalt erzeugen lassen und damit vergleichen. Das sollte immer funktionieren

Nein, das funktioniert nicht zuverlässig bei MS Office Dokumenten. Grund: Word (und IIRC auch Excel) ändern gern mal den Dateiinhalt, obwohl man das Dokument nur geöffnet und wieder geschlossen hat. Ich gebe zu, dass ich nicht weiß, wie sich MS Office ab Version 2007 verhält (DOCX ist ja nichts weiter als gezipptes XML mit ein bissel Krempel drumrum), aber bis einschließlich Version 2003 ist das so.

Einfacher Test, den jeder selbst durchführen kann: Word-Dokument erstellen und speichern. Dann im Dateimanager eine Kopie davon erzeugen und von beiden Dateien Prüfsummen erzeugen (im Total Commander sind diese Schritte ganz einfach ;)). Nun eines der Dokumente im Word öffnen und wieder schließen und wieder Prüfsummen erzeugen. Den letzten Schritt muss man u.U. mehrfach wiederholen, aber irgendwann ist der Dateiinhalt ein anderer.

MfG Dalai

Morphie 19. Nov 2013 18:20

AW: NTFS, FileAge liefert nicht das neue Geändert-Datum, sondern das alte Geändert-Da
 
Und das Änderungsdatum der Datei wird dann nicht geändert?

Vielleicht ist ein Directory-Monitor (wie man ihn aus .NET kennt: FileSystemWatcher) ja eine bessere Lösung für dich?
http://www.osnews.com/story/7376/A_D..._Delphi/page1/
Der Vorteil wäre, dass man alle Änderungen (auch von Drittprogrammen) mitbekommt.

Dalai 19. Nov 2013 18:28

AW: NTFS, FileAge liefert nicht das neue Geändert-Datum, sondern das alte Geändert-Da
 
Zitat:

Zitat von Morphie (Beitrag 1236612)
Und das Änderungsdatum der Datei wird dann nicht geändert?

Falls du mich meinst: Ja, der Zeitstempel der Datei bleibt identisch; erst beim Speichern des Dokuments setzt Office einen neuen.

MfG Dalai

himitsu 19. Nov 2013 18:31

AW: NTFS, FileAge liefert nicht das neue Geändert-Datum, sondern das alte Geändert-Da
 
Ach ja, das liegt übrigens auch mit daran, daß man in den neueren NTFS-Treibern immer mehr die Schreibzugriffe minimiert hat.
Darum wird/wurde das Last-Access nicht immer gespeichert und vorallem nicht mehr bei Verzeichnissen.

Zitat:

Zitat von Dalai (Beitrag 1236610)
Nein, das funktioniert nicht zuverlässig bei MS Office Dokumenten. Grund: Word (und IIRC auch Excel) ändern gern mal den Dateiinhalt, obwohl man das Dokument nur geöffnet und wieder geschlossen hat.

Die speichern z.B. in der Datei gerne ab, wer wann zu zuletzt darauf zugegriffen hat, und das auch bei Lesezugriffen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz