Autor Beitrag
Klaus Müller
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 1

W2000,XP,W2k2S,W2k3S,S2k7S
Delphi XP
BeitragVerfasst: So 15.10.23 11: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:
ausblenden 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 user profile iconTh69: URL-Titel hinzugefügt.
Moderiert von user profile iconTh69: Zitat-Tags hinzugefügt
Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt
Moderiert von user profile iconTh69: Topic aus IO, XML und Registry verschoben am So 15.10.2023 um 15:11
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 15.10.23 12: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 1

W2000,XP,W2k2S,W2k3S,S2k7S
Delphi XP
BeitragVerfasst: Di 17.10.23 17: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 18.10.23 10:06 
Dies kannst du in der Hilfe dazu nachlesen: BBCodes ff.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 18.10.23 10: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 53
Erhaltene Danke: 1

W2000,XP,W2k2S,W2k3S,S2k7S
Delphi XP
BeitragVerfasst: Do 09.11.23 17:44 
Hallo, habe einfach PAnsiChar eingesetzt, damit geht es.
Daher Danke dafür!
Winterschlaf
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 19.11.23 18:06 
Die Funktion FileGetDate() gibt, soviel ich weiss, nach einer Zeitumstellung (Winter/Sommer) nicht die korrekte Uhrzeit wieder.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 20.11.23 00: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



BeitragVerfasst: Mo 20.11.23 09: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.

ausblenden 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, 00);
  try
    if not GetFileTime(hFile, @CreationTime, nilnilor
      not FileTimeToSystemTime(CreationTime, SystemTime) or
      not SystemTimeToTzSpecificLocalTime(nil, SystemTime, LocalTime) then
      RaiseLastOSError;
    result := SystemTimeToDateTime(LocalTime);
  finally
    CloseHandle(hFile);
  end;
end;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 20.11.23 11:21 
Die von mir erwähnten Funktionen TFile.GetCreationTime usw. machen das schon korrekt. Wenn es geht, sollte man diese verwenden.