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
GetFolderDate - bei Verzeichnissen mit Umlauten
- 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
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.
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.
-
- 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
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.
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.