Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wie komme ich an die verschiedenen Datumswerte einer Datei? (https://www.delphipraxis.net/200828-wie-komme-ich-die-verschiedenen-datumswerte-einer-datei.html)

Woodman 29. Mai 2019 16:07

Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Wissende,
tja, die Frage ist sicher schon hundertmal beantwortet worden, aber für mein Problem habe ich noch keine Lösung gefunden.
Folgendes: Bekannt ist mir diese Routine:
Delphi-Quellcode:
// Hier gefunden: https://www.delphipraxis.net/6594-letzten-zugriff-auf-datei-auslesen.html
function GetFileTimes(const FileName: string; var Created: TDateTime;
var Accessed: TDateTime; var Modified: TDateTime): Boolean;
var
  h: THandle;
  Info1, Info2, Info3: TFileTime;
  SysTimeStruct: SYSTEMTIME;
  TimeZoneInfo: TTimeZoneInformation;
  Bias: Double;
begin
  Result := False;
  Bias := 0;
  h := FileOpen(FileName, fmOpenRead or fmShareDenyNone);
  if h > 0 then
  begin
    try
      if GetTimeZoneInformation(TimeZoneInfo) <> $FFFFFFFF then
        Bias := TimeZoneInfo.Bias / 1440 * 2; // 60x24
      GetFileTime(h, @Info1, @Info2, @Info3);
      if FileTimeToSystemTime(Info1, SysTimeStruct) then
        Created := SystemTimeToDateTime(SysTimeStruct) - Bias;
      if FileTimeToSystemTime(Info2, SysTimeStruct) then
        Accessed := SystemTimeToDateTime(SysTimeStruct) - Bias;
      if FileTimeToSystemTime(Info3, SysTimeStruct) then
        Modified := SystemTimeToDateTime(SysTimeStruct) - Bias;
      Result := True;
    finally
      FileClose(h);
    end;
  end;
end;
Diese Routine gibt mir das Creation Date, Last access date und das Modified date zurück. Soweit, so gut...
Mein Explorer zeigt aber 4 Datumswerte an:
Anhang 51162
In meinem Falle such ich das tatsächliche Erstell- bzw. Scan-Datum. Da die Dateien schon mal umkopiert wurden, zeigt das Erstell-Datum nur das Kopierdatum an. Das eigentliche Erstelldatum wird hier unter "Datum" angezeigt.
Wie komme ich an dieses Datum heran??

Delphi.Narium 29. Mai 2019 16:19

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Eventuell EXIF-Daten aus dem JPeg?

https://www.google.com/search?q=delp...utf-8&oe=utf-8

https://sno.phy.queensu.ca/~phil/exi...ames/EXIF.html

https://www.get-metadata.com/

Woodman 29. Mai 2019 16:48

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1433396)
Eventuell EXIF-Daten aus dem JPeg?

...

Nee, leider nicht. Die Dateien sind - wie ich oben schon angedeutet habe - die Ergebnisse eines Dia-Scanners. Und der schreibt leider keine Exifdaten rein. Das ist aber genau das, was ich machen möchte.

philipp.hofmann 29. Mai 2019 16:52

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Das Datum mit dem letzten Update findest Du folgendermaßen heraus und dies ist auf allen OS kompilierbar (ich kann jetzt aber nicht die Hand in's Feuer legen, dass es auch auf allen OS einen brauchbaren Wert zurückliefert, das müsste ich erst testen):

Delphi-Quellcode:
class function TFileUtils.getFileChangeDate(filename:String):TDateTime;
var sr: TSearchRec;
begin
  Result := 0;
  try
    if FindFirst(filename, faNormal, sr) = 0 then
      Result := sr.TimeStamp;
  finally
    FindClose(sr);
  end;
end;

Woodman 29. Mai 2019 17:28

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Zitat:

Zitat von philipp.hofmann (Beitrag 1433399)
Das Datum mit dem letzten Update findest Du folgendermaßen heraus ....

Vielen Dank, das funktioniert... Ist aber leider nicht das was ich gesucht habe. S.o.
Tatsächlich gibt Deine Routine das gleiche zurück wie SysUtils.FileAge(Filename), also das Änderungsdatum.

Luckie 29. Mai 2019 17:36

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Ich sehe auf dem Screenshort nur drei Datumswerte.

Woodman 29. Mai 2019 17:43

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Luckie (Beitrag 1433403)
Ich sehe auf dem Screenshort nur drei Datumswerte.

Ähm, also von links nach rechts:
Datum, Erstelldatum, Änderungsdatum und Letzter Zugriff
Anhang 51163

peterbelow 29. Mai 2019 18:53

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Zitat:

Zitat von Woodman (Beitrag 1433395)
Hallo Wissende,
tja, die Frage ist sicher schon hundertmal beantwortet worden, aber für mein Problem habe ich noch keine Lösung gefunden.
Folgendes: Bekannt ist mir diese Routine:
Delphi-Quellcode:
// Hier gefunden: https://www.delphipraxis.net/6594-letzten-zugriff-auf-datei-auslesen.html
function GetFileTimes(const FileName: string; var Created: TDateTime;
var Accessed: TDateTime; var Modified: TDateTime): Boolean;
var
  h: THandle;
  Info1, Info2, Info3: TFileTime;
  SysTimeStruct: SYSTEMTIME;
  TimeZoneInfo: TTimeZoneInformation;
  Bias: Double;
begin
  Result := False;
  Bias := 0;
  h := FileOpen(FileName, fmOpenRead or fmShareDenyNone);
  if h > 0 then
  begin
    try
      if GetTimeZoneInformation(TimeZoneInfo) <> $FFFFFFFF then
        Bias := TimeZoneInfo.Bias / 1440 * 2; // 60x24
      GetFileTime(h, @Info1, @Info2, @Info3);
      if FileTimeToSystemTime(Info1, SysTimeStruct) then
        Created := SystemTimeToDateTime(SysTimeStruct) - Bias;
      if FileTimeToSystemTime(Info2, SysTimeStruct) then
        Accessed := SystemTimeToDateTime(SysTimeStruct) - Bias;
      if FileTimeToSystemTime(Info3, SysTimeStruct) then
        Modified := SystemTimeToDateTime(SysTimeStruct) - Bias;
      Result := True;
    finally
      FileClose(h);
    end;
  end;
end;
Diese Routine gibt mir das Creation Date, Last access date und das Modified date zurück. Soweit, so gut...
Mein Explorer zeigt aber 4 Datumswerte an:
Anhang 51162
In meinem Falle such ich das tatsächliche Erstell- bzw. Scan-Datum. Da die Dateien schon mal umkopiert wurden, zeigt das Erstell-Datum nur das Kopierdatum an. Das eigentliche Erstelldatum wird hier unter "Datum" angezeigt.
Wie komme ich an dieses Datum heran??

Das angezeigte Erstelldatum kann nur in der Datei selbst stehen, es ist nicht Teil der Metadaten des Filesystems. Explorer weis offenbar, wie er das aus der jpg-Datei ecxtrahieren muss (eventuell ein Plugin der Scannersoftware??).

Luckie 29. Mai 2019 19:13

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Zitat:

Zitat von Woodman (Beitrag 1433404)
Zitat:

Zitat von Luckie (Beitrag 1433403)
Ich sehe auf dem Screenshort nur drei Datumswerte.

Ähm, also von links nach rechts:
Datum, Erstelldatum, Änderungsdatum und Letzter Zugriff
Anhang 51163

Mist. Ich habe nur die drei Datumsspalten rechts gesehen. :roll:

Benmik 29. Mai 2019 19:59

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Bei diesen Daten geht es sowieso nicht mit rechten Dingen zu. Wie kann das letzte Änderungsdatum vor dem Erstelldatum liegen? "Datum" wird vom Explorer offenbar auch nur bei Bildern angeboten. Das ist sicher, dass der Scanner keine EXIF-Sektion angelegt hat?

Dalai 29. Mai 2019 20:26

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Zitat:

Zitat von Benmik (Beitrag 1433419)
Wie kann das letzte Änderungsdatum vor dem Erstelldatum liegen?

Überhaupt kein Problem. Man kann das Änderungsdatum von Dateien ändern. Ordentliche Dateimanager übertragen diese Angabe sogar standardmäßig auf Kopien einer Datei. Das Erstellungsdatum lässt sich zwar auch ändern, wird aber seltener gemacht. Diese beiden Dinge zusammengenommen führen eben manchmal dazu, dass das Änderungsdatum vor dem Erstelldatum liegt.

Grüße
Dalai

philipp.hofmann 29. Mai 2019 22:54

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Okay, meine Antwort war etwas zu kurz ausgefallen: Am TSearchRec gibt es weitere Methoden, u.a.
FindData (Windows only) contains additional information such as the file creation time, last access time, and both the long and short file names.

Aber vermutlich sind dies auch die beiden Datumswerte, die du schon hast.

jaenicke 30. Mai 2019 05:58

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Zitat:

Zitat von Woodman (Beitrag 1433398)
Nee, leider nicht. Die Dateien sind - wie ich oben schon angedeutet habe - die Ergebnisse eines Dia-Scanners. Und der schreibt leider keine Exifdaten rein. Das ist aber genau das, was ich machen möchte.

Die EXIF-Daten werden manchmal in etwas unterschiedlichen Formaten hineingeschrieben, was dazu führt, dass nicht alle Tools diese lesen können. Der Windows Explorer ist dort sehr universell und kann die meisten dieser Formate lesen.

Eine andere Möglichkeit für ein Datum im Dateiystem gibt es dort nicht, es wird nur aus der Datei ausgelesen und bei Misserfolg das Änderungsdatum aus dem Dateisystem angezeigt.

Woodman 30. Mai 2019 13:17

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Leute,
vielen Dank für Eure Beiträge. Ich glaube, ich muss das mal in einem Microsoft-Forum anfragen.
Tatsächlich sind in den JPEGs keine Exif-Infos drin. Es gibt zwar diverse andere Infos drin. XnView zeigt mir z.B. diese Datei-Eigenschaften an:
Anhang 51168
Da stehen tatsächlich auch drin, welche Software den Scan durchgeführt hat - aber eben nicht als Exif und auch nicht als IPTC.
Auch bei "normalen" Dateien sind dies 4 Datumswerte vorhanden:
Anhang 51169
Wie man sieht, hat das "Datum" nicht immer das entsprechende Pendant eines anderen Datumwertes. Bei der Datei "termine2019.xls" im oberen Bild z.B. weicht der Wert von "Datum" von den anderen Datumswerten ab.

Ich werde weiter forschen...

Delphi.Narium 30. Mai 2019 13:35

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Schonmal in die Spezifikation für JPegs geschaut?

https://www.w3.org/Graphics/JPEG/jfif3.pdf

http://www.aboutvb.de/bas/formate/pdf/jpg.pdf

Da steht so etliches von dem drin, was XNView (und andere Progranmme) anzeigen können.

EXIF ist "nur" ein AddOn, damit man in Bildern auch solche Daten speichern kann, die für die Darstellung der Bilder eigentlich nicht erforderlich sind. Also quasi eine "Kommentarfunktion nach definierten Regeln" ;-)

Benmik 30. Mai 2019 15:07

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Zitat:

Zitat von Dalai (Beitrag 1433422)
Man kann das Änderungsdatum von Dateien ändern.

Natürlich kann man das nach Belieben, das ist schon klar. Hier geht es aber nicht um manipulierte Dateidaten. Warum sollte ein Diascanner die Daten so setzen, dass das Änderungsdatum vor dem Erstelldatum liegt? In jedem Fall stimmt da was nicht, kann auch schlampige Implementierung sein.
Der TE sollte mal ein Bildschirmfoto mit dem Hexdump des Dateianfangs einstellen, dann könnte man mal nachsehen, was da in der Datei drin ist.

Woodman 30. Mai 2019 15:39

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Nur kurz zur Erklärung, warum das Änderungsdatum vor dem Erstelldatum liegt (Das kann auch jeder selber testen): Die Dateien aus dem Screendump habe vom Original "Enstehungsort" in ein anderes Verzeichnis kopiert. Das kann man auch daran erkennen, das "Erstelldatum" und "letzter Zugriff" bei allen Dateien identisch ist aber unter "Datum" ist noch das Original-Erstelldatum zu erkennen.

HolgerX 30. Mai 2019 16:19

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Hmm..

Ich denke mal, ohne ein 'Muster' Bild werden wir Dir nicht weiterhelfen können..
Die 'normalen' Möglichkeiten, zusätzliche Informationen in einem JPEG unterzubringen sind Dir aufgezählt worden.

Um eine Lösung bringen zu können, geht es nur noch mit einer Musterdatei, bzw. eines HEX-Dumps, wobei dieser schon mindestens die ersten 1K Bytes umfassen sollte..

Ach ja, einfach ein Bild hier im Post einzuhängen wird nichts bringen, da diese Bilder (glaube ich) umcodiert/verkleinert werden.
Somit das Muster (z.B. packen, damit es erhalten bleibt) und als Anhang hinzufügen.

Woodman 30. Mai 2019 17:34

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Also, ich habe ein wenig "gespielt" und glaube jetzt die Lösung gefunden zu haben für den Wert von "Datum":

Wenn keine Exif-Daten vorhanden sind:
=> Datum = Änderungsdatum
Wenn Exif-Daten und Aufnahmedatum vorhanden:
=> Datum = Aufnahmedatum
Wenn Exif-Daten vorhanden aber kein Aufnahmedatum aber ein Digitalisierungsdatum vorhanden:
=> Datum = Digitalisierungsdatum
Diese Aufzählung erhebt keinen Anspruch auf Vollständigkeit.

Dalai 30. Mai 2019 20:57

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Schau mal mit IrfanView, welche Art von Metadaten in den Bildern hinterlegt sind. Es gibt nicht nur EXIF sondern auch IPTC und andere. Beispiel siehe Anhang, linke untere Ecke.

Grüße
Dalai

Woodman 31. Mai 2019 11:16

AW: Wie komme ich an die verschiedenen Datumswerte einer Datei?
 
Liste der Anhänge anzeigen (Anzahl: 5)
Hallo Dalai,
vielen Dank für den Tipp. Dafür habe ich mir IrfanView mal installiert.
So sieht eine Datei (unbearbeitet) vom Scanner aus:
Anhang 51175
Man sieht: Keine Exif-Daten, IPTC-Daten sind leer und nur der Comment ist belegt:
Anhang 51176
Hier hat das Scann-Programm seine Spuren hinterlassen. Ich bearbeite das Bild dann mit einem Programm von mir, mit dem ich zusätzliche Infos sowohl in die Exif- als auch in die IPTC-Daten schreibe. Das sieht dann so aus:
Anhang 51178
In die Exif-Daten schreibe ich das Scanner-Model und das Scann-Datum:
Anhang 51179
Und in die IPTC-Daten kommt eine "Überschrift" und die kurze Beschreibung vom Dia hinein:
Anhang 51180

Aber mein eigentliches "Problem" ist ja gelöst: Das "Datum" vom Explorer ist lediglich ein virtueller Wert, den sich der Explorer von den Daten abgreift die er so erwischt, wohl in der Reihenfolge "Aufnahmedatum" aus den Exifdaten. Wenn nicht vorhanden das "Scann-Datum" aus den ExifDaten und wenn er keine Exifdaten findet dann das "Erstelldatum".


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 Uhr.

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