AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Wie komme ich an die verschiedenen Datumswerte einer Datei?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie komme ich an die verschiedenen Datumswerte einer Datei?

Ein Thema von Woodman · begonnen am 29. Mai 2019 · letzter Beitrag vom 31. Mai 2019
Antwort Antwort
Benutzerbild von Woodman
Woodman

Registriert seit: 17. Mär 2007
74 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Wie komme ich an die verschiedenen Datumswerte einer Datei?

  Alt 29. Mai 2019, 16:07
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:
Explorer-Auszug-Datumjpg.jpg
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??
Keep
Horst
Delphi 10.1 Berlin Starter unter Windows 10 - 1803
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.443 Beiträge
 
Delphi 7 Professional
 
#2

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

  Alt 29. Mai 2019, 16:19
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/
  Mit Zitat antworten Zitat
Benutzerbild von Woodman
Woodman

Registriert seit: 17. Mär 2007
74 Beiträge
 
Delphi 10.1 Berlin Starter
 
#3

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

  Alt 29. Mai 2019, 16:48
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.
Keep
Horst
Delphi 10.1 Berlin Starter unter Windows 10 - 1803
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
872 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 29. Mai 2019, 16:52
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;
  Mit Zitat antworten Zitat
Benutzerbild von Woodman
Woodman

Registriert seit: 17. Mär 2007
74 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

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

  Alt 29. Mai 2019, 17:28
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.
Keep
Horst
Delphi 10.1 Berlin Starter unter Windows 10 - 1803
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

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

  Alt 29. Mai 2019, 17:36
Ich sehe auf dem Screenshort nur drei Datumswerte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.402 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 30. Mai 2019, 05:58
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Woodman
Woodman

Registriert seit: 17. Mär 2007
74 Beiträge
 
Delphi 10.1 Berlin Starter
 
#8

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

  Alt 30. Mai 2019, 13:17
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:
XnView-Ansicht1.jpg
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:
Explorer-Auszug-Datum2.jpg
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...
Keep
Horst
Delphi 10.1 Berlin Starter unter Windows 10 - 1803
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.443 Beiträge
 
Delphi 7 Professional
 
#9

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

  Alt 30. Mai 2019, 13:35
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"
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
678 Beiträge
 
Delphi 11 Alexandria
 
#10

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

  Alt 29. Mai 2019, 18:53
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??).
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:18 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