GetFolderDate - bei Verzeichnissen mit Umlauten

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Meridian
Beiträge: 42
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

GetFolderDate - bei Verzeichnissen mit Umlauten

Beitrag von Meridian »

Hallo zusammen,

mit der nachfolgenden function kann ich das Erstelldatum eines Verzeichnisses z.B. ('C:\Windows...') auslesen. Aber leider funktiniert es nicht, wenn im angegebenen Pfad irgendwo ein Umlaut ist. Bei GetFolderDate('C:\Übernahme'),tf) funktioniert es nicht.

function GetFolderDate(const AFolder: string): TDateTime;
var
FolderData: TWin32FileAttributeData;
FileTime: _FILETIME;
DW: DWORD;
begin
Result := 0;
FillChar(FolderData, SizeOf(FolderData), 0);

if GetFileAttributesEx(PChar(AFolder), GetFileExInfoStandard, @FolderData) then
begin
FileTimeToLocalFileTime(FolderData.ftCreationTime, FileTime);
FileTimeToDosDateTime(FileTime, LongRec(DW).Hi, LongRec(DW).Lo);
Result := FileDateToDateTime(DW);
end;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
Var tf: TFormatSettings;
Begin
GetLocaleFormatSettings(GetSystemDefaultLCID, tf);
Showmessage(DateTimeToStr(GetFolderDate('C:\Windows'),tf));
end;


Über eine mögliche Lösung (irgendwie mit UTF8) würde ich mich freuen.

Viele Grüße aus Niedersachsen

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 386
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: GetFolderDate - bei Verzeichnissen mit Umlauten

Beitrag von Jorg3000 »

Hi!
Das liegt vermutlich daran, dass AFolder in UTF-8 kodiert ist, während die Windows-Aufrufe wie GetFileAttributesEx() die System-Codepage erwarten, wie z.B. Codepage 1252 für Westeuropäisch.

Ich würde das Problem umschiffen, indem ich den AFolder an einen UnicodeString übergebe und dann die WideString-Version GetFileAttributesExW() aufrufe.
Ich glaube dann muss auch FolderData auf WideString umgestellt werden.
Habe gerade kein Lazarus offen, um es auszuprobieren.

Meridian
Beiträge: 42
Registriert: Di 22. Feb 2022, 12:19
OS, Lazarus, FPC: Window 11
CPU-Target: 64Bit
Wohnort: Cloppenburg

Re: GetFolderDate - bei Verzeichnissen mit Umlauten

Beitrag von Meridian »

Hi,

vielen Dank, mit Deinem Hinweis hab ich es hinbekommen.

Ich musste nur
if GetFileAttributesEx(PChar(AFolder), GetFileExInfoStandard, @FolderData) then
wie folgt ändern...
if GetFileAttributesExW(PWideChar(UTF8ToUTF16(AFolder)), GetFileExInfoStandard, @FolderData) then

Und LazUTF8 muss natürlich in uses

Danke für die schnelle Hilfe.

Antworten