| 
| Autor | Beitrag |  
| Klaus Müller 
          Beiträge: 58
 Erhaltene Danke: 1
 
 W2000,XP,W2k2S,W2k3S,S2k7S
 Delphi XP
 
 | 
Verfasst: So 15.10.23 10:30 
 
Hallo Programmierer,
 Leider habe ich einen Fehler von einer Funktion, die nicht von mir ist.
 Sie ist von: ...get a file's date ? Die Fehlermeldung ist:
 	  | Zitat: |  	  | E2010 Inkompatible Typen: 'PAnsiChar' und 'PWideChar' | 
 Hat jemand eine Idee woran das liegt?
 Der Source Code ist:
 		Moderiert von                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 
 | function GetFileDateTime(const FileName: TFileName): TDateTime;var
 FStruct: TOFSTRUCT;
 wndFile: Integer;
 begin
 wndFile := OpenFile(PChar(FileName), FStruct, OF_SHARE_DENY_NONE);
 Result  := FileDateToDateTime(FileGetDate(wndFile));
 CloseHandle(wndFile);
 end;
 |   Th69: URL-Titel hinzugefügt.
Moderiert von  Th69: Zitat-Tags hinzugefügt
Moderiert von  Th69: Delphi-Tags hinzugefügtModeriert von  Th69: Topic aus IO, XML und Registry verschoben am So 15.10.2023 um 15:11 |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: So 15.10.23 11:31 
 
OpenFile ist eine alte Funktion, weshalb der Dateiname als PAnsiChar übergeben werden muss. Entweder verwendest du daher PAnsiChar statt PChar/PWideChar oder du verwendest (was laut Doku auch empfohlen wird) die Funktion CreateFile. Für diesen Beitrag haben gedankt: Klaus Müller
 |  |  |  
| Klaus Müller  
          Beiträge: 58
 Erhaltene Danke: 1
 
 W2000,XP,W2k2S,W2k3S,S2k7S
 Delphi XP
 
 | 
Verfasst: Di 17.10.23 16:06 
 
Hallo Sebastian,
 Danke für die Info, Werde es mit der neueren Funktion versuchen.
 
 Auch Dank an den Moderator für das InForm bringen des Beitrags!
 Habe leider vergessen wie das mit den Delphi Tags geht.
 |  |  |  
| Th69 
          
  Beiträge: 4800
 Erhaltene Danke: 1059
 
 Win10
 C#, C++ (VS 2017/19/22)
 
 | 
Verfasst: Mi 18.10.23 09:06 
 
Dies kannst du in der Hilfe dazu nachlesen: BBCodes  ff. |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Mi 18.10.23 09:57 
 
Bei einigermaßen aktuellen Versionen von Delphi kannst du auch einfach die Unit System.IOUtils verwenden. Die hat Funktionen wie TFile.GetLastWriteTime oder TFile.GetCreationTime. |  |  |  
| Klaus Müller  
          Beiträge: 58
 Erhaltene Danke: 1
 
 W2000,XP,W2k2S,W2k3S,S2k7S
 Delphi XP
 
 | 
Verfasst: Do 09.11.23 16:44 
 
Hallo, habe einfach PAnsiChar eingesetzt, damit geht es.
Daher Danke dafür!
 |  |  |  
| Winterschlaf Hält's aus hier
 Beiträge: 5
 
 
 
 
 | 
Verfasst: So 19.11.23 17:06 
 
Die Funktion FileGetDate() gibt, soviel ich weiss, nach einer Zeitumstellung (Winter/Sommer) nicht die korrekte Uhrzeit wieder. |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: So 19.11.23 23:42 
 
FileGetDate liefert die Systemzeit. Da gibt es keine Sommer- oder Winterzeit. Erst bei Umrechnung in die lokale Zeitzone wird diese dann eingerechnet. |  |  |  
| Winterschlaf Hält's aus hier
 Beiträge: 5
 
 
 
 
 | 
Verfasst: Mo 20.11.23 08:20 
 
Das meine ich damit. Sobald eine Datei, die in der Sommerzeit (Ende März - Ende Oktober) erstellt wurde mit FileGetDate() ausgelesen wird, während wir uns in der Winterzeit befinden, weicht die ausgelesene Zeit von der tatsächlichen / im Explorer angezeigten Zeit um x-Stunden ab.
 Damit daa nicht passiert, muss man die Funktion ein wenig erweitern.
 		                       Delphi-Quelltext 
 									| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 
 | function GetCreationFileDateTime(const FileName: TFileName): TDateTime;var
 hFile: THandle;
 CreationTime: TFileTime;
 SystemTime, LocalTime: TSystemTime;
 begin
 hFile := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
 try
 if not GetFileTime(hFile, @CreationTime, nil, nil) or
 not FileTimeToSystemTime(CreationTime, SystemTime) or
 not SystemTimeToTzSpecificLocalTime(nil, SystemTime, LocalTime) then
 RaiseLastOSError;
 result := SystemTimeToDateTime(LocalTime);
 finally
 CloseHandle(hFile);
 end;
 end;
 |  |  |  |  
| jaenicke 
          Beiträge: 19326
 Erhaltene Danke: 1749
 
 W11 x64 (Chrome, Edge)
 Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
 
 | 
Verfasst: Mo 20.11.23 10:21 
 
Die von mir erwähnten Funktionen TFile.GetCreationTime usw. machen das schon korrekt. Wenn es geht, sollte man diese verwenden. |  |  |  |