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 kann ich Erzeugungsdatum einer Datei ermitteln ? (https://www.delphipraxis.net/112840-wie-kann-ich-erzeugungsdatum-einer-datei-ermitteln.html)

EccoBravo 28. Apr 2008 09:45


Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Hallo Kollegen,

wie kann ich das Erzeugungs- oder Änderungsdatum einer Datei (speziell einer *.jpg und *.bmp) ermitteln und neu festlegen?

Vielen Dank

E. B.

Meflin 28. Apr 2008 09:47

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Moin,

MSDN-Library durchsuchenGetFileTime und MSDN-Library durchsuchenSetFileTime dürften dir weiterhelfen ;)

EccoBravo 28. Apr 2008 10:05

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Danke,

Die Anwendung der Funktion

Delphi-Quellcode:
DateTimeString := GetFileTime(Filename);
führt leider zur Fehlermeldung:

...E2010 Incompatible Typen Cardinal und String

Wie verwende ich die Funktionen GetFileTime und SetFileTime richtig ?

Vielen Dank

E. B.

mkinzler 28. Apr 2008 10:06

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Frag mal F1

Meflin 28. Apr 2008 10:09

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Zitat:

Zitat von EccoBravo
Wie verwende ich die Funktionen GetFileTime und SetFileTime richtig ?

Glaube du musst
Delphi-Quellcode:
SystemTimeToDateTime(FileTimeToSystemTime(_FILETIME))
machen. Oder so ähnlich :stupid:


kiar 28. Apr 2008 11:12

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
moin,

schon mal gesucht?


http://www.delphipraxis.net/internal...ht=getfiletime



raik

EccoBravo 28. Apr 2008 12:58

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Hallo Kollegen,

ich bin bei der Problemlösung rein zufällig auf eine interessante Beobachtung gekommen, die ich als Bug-Vermutung äußern möchte

Hierzu zitiere ich mich erst mal selbst:
Zitat:

ich suche gerade zum gleichen Thema und habe marabus Code ausprobiert:
Dabei entdeckte ich einen, schon früher mit anderen Programmen bemerkten Fehler:

Datum und Zeit werden mit Attribut, welches von ftCreationTime ausgelesen wird, nicht richtig wiedergegeben.

Die Aufnahmezeiten, die ich mit ftCreationTime auslese entsprechen nicht dem Zeitpunkt, zu dem die Foto gemacht wurden, sondern dem Zeitpunkt, zu dem die Fotos auf den Rechner überspielt wurden.

Das richtige korrekte Fotoaufnahmedatum lese ich mit ftLastWriteTime aus, also fälschlicherweise mit dem befehl, der das letzte Schreiben des Bildfiles tituliert (also dem Zeitstamp beim Kopieren).

Diese Beobachtung habe ich schon mit dem Fotoprogramm ACDSee gemacht, als ich die zu importierenden Fotos mit dem Aufnahmedatum umbenennen wollte. ACDSee benannte dann die Fotos nicht mit dem AufnahmeDatum um sondern mit dem Änderungs (also dem Zeitstämp des Importierens) um.
Ebenfalls die Verzeichnisnamen in der ACDSee Datenbank haben nicht das AufnahmeDatum sondern den ImportDatum zum Namen.
In ACDSee werden die richtigen Bildnamen erst durch die Umbenennungsfunktion nach Änderungsdatum beim Importieren richtig benannt.

Fazit der ganzen Beobachtung: AufnahmeDatum und Änderungsdatum sind in den jpg-BildHeadern vertauscht.
Diese gilt sowohl für XP home und Vista.

Dieses also eine Bug-Vermutung.
oder nachzulesen im Thread:
http://www.delphipraxis.net/internal...t.php?t=127336

jedenfalls nach austauschen des Befehls ftCreationTime und ftLastWriteTime funktioniert es bei mir.
Die vom Fotoapparat mit meinem Programm importierten Bilder erhalten nun ihren richtigen Bildnamen, der aus dem AufnahmeZeitpunkt gebildet werden soll.

Also nochmals Danke.

E. B.

Luckie 28. Apr 2008 13:44

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Zitat:

Zitat von EccoBravo
Datum und Zeit werden mit Attribut, welches von ftCreationTime ausgelesen wird, nicht richtig wiedergegeben.

Die Aufnahmezeiten, die ich mit ftCreationTime auslese entsprechen nicht dem Zeitpunkt, zu dem die Foto gemacht wurden, sondern dem Zeitpunkt, zu dem die Fotos auf den Rechner überspielt wurden.

Das ist schon richtig. Wann wurde die Datei auf der Festplatte erzeugt und der Eintrag im dateisystem gemacht? Richtig, als die Datei kopiert wurde. Zu diesem Zeitpunkt wurde sie auf deiner Festplatte erzeugt.

Zitat:

Das richtige korrekte Fotoaufnahmedatum lese ich mit ftLastWriteTime aus, also fälschlicherweise mit dem befehl, der das letzte Schreiben des Bildfiles tituliert (also dem Zeitstamp beim Kopieren).
Entweder verstehe ich dich nicht oder du irrst dich. Hast du die Datei kopiert und dannach nicht mher angefasst, entspricht das Kopierdatum dem ftLastWriteTime Zeitpunkt.

Zitat:

Fazit der ganzen Beobachtung: AufnahmeDatum und Änderungsdatum sind in den jpg-BildHeadern vertauscht.
Diese gilt sowohl für XP home und Vista.
Von was reden wir jetzt von den EXIF-Informationen oder von den dateisysteminformationen? Unabhängig davon hat das nichts mit XP oder Vista zu tun, sondern mit der Software, die die EXIF-Daten schreibt.

SaFu 28. Apr 2008 13:49

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Habe das hier mal benutzt

Erstellungsdatum von Dateien ermitteln

Gruß Sascha

prsearcher 28. Apr 2008 13:53

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Hallo zusammen,

kann es sein, dass EccoBravo den Begriff "Erstellungsdatum" falsch interpretiert ?
"Erstellungsdatum" meint doch die Dateierzeugung im Windows-Dateisystem und
nicht den tatsächlichen Foto-Aufnahmezeitpunkt (Auslöserbetätigung !?!?!?).

Der Zeitstempel des Foto-Aufnahmezeitpunkts steht meiner Meinung nach in den
sog. EXIF-Daten des Bildes.

Hoffe, dass ich EccoBravo mit meinem Kommentar nicht zu nahe getreten bin.
Will nur helfen.

Schöne Grüße, Do.

SaFu 28. Apr 2008 14:04

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
prsearcher

Delphi-Quellcode:
angemeldet: 29.06.2007
Beiträge: 1
:gruebel: :gruebel:

Die Muhkuh 28. Apr 2008 14:05

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Wo ist das Problem?

DeddyH 28. Apr 2008 14:06

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Zitat:

Zitat von Die Muhkuh
Wo ist das Problem?

Wollte ich auch gerade fragen :lol:

SaFu 28. Apr 2008 14:07

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Da gibt es kein Problem ich finds lustig :mrgreen: sehr zurückgehalten mit so einem Fachwissen

EccoBravo 28. Apr 2008 14:57

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Ihr mögt Euch über mich lustig machen, aber wenn Ihr Euch schon in mehreren Programmen mit solch einer Sache herumgeärgert habt, das auch noch auf mehreren Rechnern / Betriebssystemen / Fotoapparaten, dann würdet Ihr auch stutzig werden.
Und falls Ihr genau gelesen haben solltet, es war eine Bugvermutung und keine Bugbehauptung.
Dann mal zur Begriffsbildung, ich bin es gewohnt, Sachen so zu bezeichnen, wie sie auch sind, Und die Dateien von denen ich spreche, entstehen im Fotoapparat, wenn ich auf den Auslöser drücke und nicht erst im Rechner beim Importieren, schliesslich liegen die Bilder auf den Fotoapparatestick als jpg und nicht als Schweizer Käse.
Also um uns richtig zu verstehen, es war eine Beobachtung und ich fragte nach Leuten, den ähnliches aufgefallen ist.
Und Exif hin und Exif her, entschuldigt bitte, ich konnte mir in meiner Einfältigkeit mit Internet-Hilfe nichts richtiges drunter vorstellen. Vielleicht hätte man sich für Erstellungsdatum und Änderungsdatum auch kompliziertere Begriffe aussuchen sollen, danm wäre es hier wohl nicht zu dieser Konsternation gekommen!

Jedenfalls darf ich mich dann auch wundern, wenn ich unter ftCreateTime nicht das Datum der Aufnahme sondern das Überspieldatum auf den Rechner finde und unter ftLastWriteTime nicht das Datum des Importierens (das wäre eigentlich das letzte Schreiben gewesen) sondern das eigentliche Erstelldatum. Aber vielleicht lebe ich hier in einer verkehrten Welt!


E. B.

DeddyH 28. Apr 2008 15:09

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Hallo EccoBravo, hier hat sich niemand über Dich lustig gemacht, das hast Du wohl in den falschen Hals bekommen. Und noch einmal zu Deinem Problem: das Erstellungsdatum ist ja das, an dem zu Deiner Datei (also dem Bild) ein Dateisystemeintrag angelegt wurde. Im Normalfall sollte es also das Datum sein, an dem das Bild auf Deinen Rechner kopiert wurde. Das von Dir gesuchte "Erstellungsdatum", an dem das Bild aufgenommen wurde, steht im Header der Bilddatei selbst, den sog. EXIF-Daten, die Du auf andere Weise auslesen musst. Ich hoffe, ich konnte den Sachverhalt korrekt und verständlich wiedergeben.

SaFu 28. Apr 2008 15:13

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Zitat:

Zitat von EccoBravo
Ihr mögt Euch über mich lustig machen

Ich glaube das sich hier niemand über dich lustig gemacht hat soweit ich es erkennen kann.
Und ich denke das man hier gut aufgehoben ist wenn es um Fachfragen geht oder wenn ein Problem zu lösen ist

Gruß Sascha

EccoBravo 28. Apr 2008 15:33

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Danke DeddyH und fuknersascha,

was ich hier geäußert habe, da bitte ich um Nachsicht bei allen Lesern, ist eine Vermutung.
Ich habe alle FileAttribute schon x-mal probiert, mit dem vorhin beschriebenen Resultat.
Zu den Exif-Attributen werde ich mich morgen äußern, wenn ich dieses nochmal Mal auf meinem HomeRechner getestet habe. Ich glaube, in die Klapper zu müssen, wenn der x+1te Test nun ein anderes Ergebnis bringen sollte.

Und dann einen Gruß an unseren Moderator Luckie -
http://www.delphipraxis.net/internal...t.php?t=133568
- auch in der Software gibt es Parallelen. Schließlich verwenden verschiedenen Programme auch mal das gleiche Betriebssystem und solche Querbeobachtungen helfen mitunter, im Puzzle der Softwarewelt Probleme zu erkennen.

Gruß E. B.

FAlter 28. Apr 2008 15:51

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Hi,

das Sortieren und Verarbeiten der Bilder erledige ich inzwischen auch automatisiert.
Ich mache es etwa so:

Delphi-Quellcode:
ImgData := TImgData.Create;
try
  ImgData.BuildList := GenAll;
  ImgData.ProcessFile(Filename);

  if ImgData.HasEXIF then
    Date := ImgData.ExifObj.GetImgDateTime
  else
  if ImgData.HasIPTC then
    Date := ImgData.IptcObj.GetDateTime
  else
    Date := ImgData.FileDateTime;

  //Kopieren in Verzeichnis gemäß Datum
  //Weitere Verarbeitung, z. B. Rotation gemäß der
  //Exif-Daten

  finally
    ImgData.Free;
  end;
Die Units dazu hab ich gefunden, als ich irgendeinem Link in der DP gefolgt bin. Ich glaub von hier: http://www.delphipraxis.net/internal...ct.php?t=26085

Ich hab zwar glaub ich schon in der TImgData rumgefummelt, aber das Beispiel hier dürfte auch mit dem Original so funktionieren.

Ansonsten habe ich die Erfahrung gemacht, dass beim Kopieren / Entpacken / ... immer nur das Datum der letzten Änderung auf den Wert der Originaldatei gesetzt wird, die anderen werden meist nicht beachtet (oder gar nicht erst im Archiv gespeichert). Beim Up/Download von Dateien nicht einmal das. Lade ich etwas auf einen FTP-Server hoch, so ist die "letzte Änderung" der Zeitpunkt des hochladens. Daher ist es eben sinnvoll, die direkt im Bild gespeicherten Daten zu verwenden.

Mfg
FAlter

EccoBravo 28. Apr 2008 15:54

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Vielen Dank FAlter,
Deinen Tip werde ich nachher probieren.

E. B.

Luckie 29. Apr 2008 07:39

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Woher sollen wir hier wissen, dass du von den EXIF-Daten redest? Hier in dem Thread ging es die ganze Zeit um die Zeitstempel des Betriebssystems bzw. Dateisystems.

DeddyH 29. Apr 2008 07:41

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
@Luckie: War wohl eine Verwechslung der Begrifflichkeiten, kann doch mal vorkommen :zwinker:

Luckie 29. Apr 2008 08:26

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Jupp, sage ich ja auch nichts gegen. Nur hat sich EccoBravo irgendwie angegeriffen gefühlt hatte ich das gefühl.

Aber genug jetzt, das ist ja nun geklärt.

EccoBravo 29. Apr 2008 08:52

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
OkiDoki,
alles ist ausgesprochen und, denke ich, auch geklärt,
Thema beendet, Die Fragerei geht in den nächsten Tagen auf höherem Niveau weiter.
Grüße und seid nett zueinander

Nachtrag:
und das ist das aller wichtigste:
ich habe mit diesem Thread mein Problem sehr gut lösen können, mir wurde geholfen und ich habe wieder etwas gelernt.
Vielen Dank!


E. B.

Garfield 25. Mai 2008 18:35

Re: Wie kann ich Erzeugungsdatum einer Datei ermitteln ?
 
Ist zwar schon ein paar Tage her ...

War ein Denkfehler, siehe http://support.microsoft.com/kb/299648


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:31 Uhr.

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