Autor |
Beitrag |
Klaus Müller
      
Beiträge: 53
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:
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; |
Moderiert von 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: 19231
Erhaltene Danke: 1734
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, 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: 53
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: 4751
Erhaltene Danke: 1047
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: 19231
Erhaltene Danke: 1734
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, 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: 53
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: 19231
Erhaltene Danke: 1734
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, 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: 19231
Erhaltene Danke: 1734
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, 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.
|
|
|