mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-22 15:39:33 +02:00
LCL: fileutil: added more sysutils file functions with UTF-8 encoding
git-svn-id: trunk@16225 -
This commit is contained in:
parent
779856513e
commit
c7f781d7ab
146
lcl/fileutil.pas
146
lcl/fileutil.pas
@ -189,6 +189,11 @@ function DeleteFileUTF8(const FileName: String): Boolean;
|
|||||||
function RenameFileUTF8(const OldName, NewName: String): Boolean;
|
function RenameFileUTF8(const OldName, NewName: String): Boolean;
|
||||||
function FileSearchUTF8(const Name, DirList : String): String;
|
function FileSearchUTF8(const Name, DirList : String): String;
|
||||||
function FileIsReadOnlyUTF8(const FileName: String): Boolean;
|
function FileIsReadOnlyUTF8(const FileName: String): Boolean;
|
||||||
|
function GetCurrentDirUTF8: String;
|
||||||
|
function SetCurrentDirUTF8(const NewDir: String): Boolean;
|
||||||
|
function CreateDirUTF8(const NewDir: String): Boolean;
|
||||||
|
function RemoveDirUTF8(const Dir: String): Boolean;
|
||||||
|
function ForceDirectoriesUTF8(const Dir: string): Boolean;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -202,147 +207,6 @@ uses
|
|||||||
var
|
var
|
||||||
UpChars: array[char] of char;
|
UpChars: array[char] of char;
|
||||||
|
|
||||||
var
|
|
||||||
FNeedRTLAnsi: boolean = false;
|
|
||||||
FNeedRTLAnsiValid: boolean = false;
|
|
||||||
|
|
||||||
function NeedRTLAnsi: boolean;
|
|
||||||
{$IFDEF WinCE}
|
|
||||||
// CP_UTF8 is missing in the windows unit of the Windows CE RTL
|
|
||||||
const
|
|
||||||
CP_UTF8 = 65001;
|
|
||||||
{$ENDIF}
|
|
||||||
var
|
|
||||||
Lang: String;
|
|
||||||
i: LongInt;
|
|
||||||
Encoding: String;
|
|
||||||
begin
|
|
||||||
if FNeedRTLAnsiValid then
|
|
||||||
exit(FNeedRTLAnsi);
|
|
||||||
{$IFDEF Windows}
|
|
||||||
FNeedRTLAnsi:=GetACP<>CP_UTF8;
|
|
||||||
{$ELSE}
|
|
||||||
FNeedRTLAnsi:=false;
|
|
||||||
{$ENDIF}
|
|
||||||
Lang := SysUtils.GetEnvironmentVariable('LC_ALL');
|
|
||||||
if Length(lang) = 0 then
|
|
||||||
begin
|
|
||||||
Lang := SysUtils.GetEnvironmentVariable('LC_MESSAGES');
|
|
||||||
if Length(Lang) = 0 then
|
|
||||||
begin
|
|
||||||
Lang := SysUtils.GetEnvironmentVariable('LANG');
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
i:=System.Pos('.',Lang);
|
|
||||||
if (i>0) then begin
|
|
||||||
Encoding:=copy(Lang,i+1,length(Lang)-i);
|
|
||||||
FNeedRTLAnsi:=(SysUtils.CompareText(Encoding,'UTF-8')=0)
|
|
||||||
or (SysUtils.CompareText(Encoding,'UTF8')=0);
|
|
||||||
end;
|
|
||||||
FNeedRTLAnsiValid:=true;
|
|
||||||
Result:=FNeedRTLAnsi;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure SetNeedRTLAnsi(NewValue: boolean);
|
|
||||||
begin
|
|
||||||
FNeedRTLAnsi:=NewValue;
|
|
||||||
FNeedRTLAnsiValid:=true;
|
|
||||||
end;
|
|
||||||
|
|
||||||
function UTF8ToSys(const s: string): string;
|
|
||||||
begin
|
|
||||||
if NeedRTLAnsi then
|
|
||||||
Result:=s
|
|
||||||
else
|
|
||||||
Result:=UTF8ToAnsi(s);
|
|
||||||
end;
|
|
||||||
|
|
||||||
function SysToUTF8(const s: string): string;
|
|
||||||
begin
|
|
||||||
if NeedRTLAnsi then
|
|
||||||
Result:=s
|
|
||||||
else
|
|
||||||
Result:=AnsiToUTF8(s);
|
|
||||||
end;
|
|
||||||
|
|
||||||
function FileExistsUTF8(const Filename: string): boolean;
|
|
||||||
begin
|
|
||||||
Result:=SysUtils.FileExists(UTF8ToSys(Filename));
|
|
||||||
end;
|
|
||||||
|
|
||||||
function FileAgeUTF8(const FileName: String): Longint;
|
|
||||||
begin
|
|
||||||
Result:=SysUtils.FileAge(UTF8ToSys(Filename));
|
|
||||||
end;
|
|
||||||
|
|
||||||
function DirectoryExistsUTF8(const Directory: string): Boolean;
|
|
||||||
begin
|
|
||||||
Result:=SysUtils.DirectoryExists(UTF8ToSys(Directory));
|
|
||||||
end;
|
|
||||||
|
|
||||||
function FindFirstUTF8(const Path: string; Attr: Longint; out Rslt: TSearchRec
|
|
||||||
): Longint;
|
|
||||||
begin
|
|
||||||
Result:=SysUtils.FindFirst(UTF8ToSys(Path),Attr,Rslt);
|
|
||||||
Rslt.Name:=SysToUTF8(Rslt.Name);
|
|
||||||
{$IFDEF Unix}
|
|
||||||
Rslt.PathOnly:=SysToUTF8(Rslt.PathOnly);
|
|
||||||
{$ENDIF}
|
|
||||||
end;
|
|
||||||
|
|
||||||
function FindNextUTF8(var Rslt: TSearchRec): Longint;
|
|
||||||
begin
|
|
||||||
Rslt.Name:=UTF8ToSys(Rslt.Name);
|
|
||||||
{$IFDEF Unix}
|
|
||||||
Rslt.PathOnly:=UTF8ToSys(Rslt.PathOnly);
|
|
||||||
{$ENDIF}
|
|
||||||
Result:=SysUtils.FindNext(Rslt);
|
|
||||||
Rslt.Name:=SysToUTF8(Rslt.Name);
|
|
||||||
{$IFDEF Unix}
|
|
||||||
Rslt.PathOnly:=SysToUTF8(Rslt.PathOnly);
|
|
||||||
{$ENDIF}
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure FindCloseUTF8(var F: TSearchrec);
|
|
||||||
begin
|
|
||||||
SysUtils.FindClose(F);
|
|
||||||
end;
|
|
||||||
|
|
||||||
function FileSetDateUTF8(const FileName: String; Age: Longint): Longint;
|
|
||||||
begin
|
|
||||||
Result:=SysUtils.FileSetDate(UTF8ToSys(Filename),Age);
|
|
||||||
end;
|
|
||||||
|
|
||||||
function FileGetAttrUTF8(const FileName: String): Longint;
|
|
||||||
begin
|
|
||||||
Result:=SysUtils.FileGetAttr(UTF8ToSys(Filename));
|
|
||||||
end;
|
|
||||||
|
|
||||||
function FileSetAttrUTF8(const Filename: String; Attr: longint): Longint;
|
|
||||||
begin
|
|
||||||
Result:=SysUtils.FileSetAttr(UTF8ToSys(Filename),Attr);
|
|
||||||
end;
|
|
||||||
|
|
||||||
function DeleteFileUTF8(const FileName: String): Boolean;
|
|
||||||
begin
|
|
||||||
Result:=SysUtils.DeleteFile(UTF8ToSys(Filename));
|
|
||||||
end;
|
|
||||||
|
|
||||||
function RenameFileUTF8(const OldName, NewName: String): Boolean;
|
|
||||||
begin
|
|
||||||
Result:=SysUtils.RenameFile(UTF8ToSys(OldName),UTF8ToSys(NewName));
|
|
||||||
end;
|
|
||||||
|
|
||||||
function FileSearchUTF8(const Name, DirList: String): String;
|
|
||||||
begin
|
|
||||||
Result:=SysUtils.FileSearch(UTF8ToSys(Name),UTF8ToSys(DirList));
|
|
||||||
end;
|
|
||||||
|
|
||||||
function FileIsReadOnlyUTF8(const FileName: String): Boolean;
|
|
||||||
begin
|
|
||||||
Result:=SysUtils.FileIsReadOnly(UTF8ToSys(Filename));
|
|
||||||
end;
|
|
||||||
|
|
||||||
{$I fileutil.inc}
|
{$I fileutil.inc}
|
||||||
|
|
||||||
procedure InternalInit;
|
procedure InternalInit;
|
||||||
|
@ -17,6 +17,172 @@
|
|||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var
|
||||||
|
FNeedRTLAnsi: boolean = false;
|
||||||
|
FNeedRTLAnsiValid: boolean = false;
|
||||||
|
|
||||||
|
function NeedRTLAnsi: boolean;
|
||||||
|
{$IFDEF WinCE}
|
||||||
|
// CP_UTF8 is missing in the windows unit of the Windows CE RTL
|
||||||
|
const
|
||||||
|
CP_UTF8 = 65001;
|
||||||
|
{$ENDIF}
|
||||||
|
var
|
||||||
|
Lang: String;
|
||||||
|
i: LongInt;
|
||||||
|
Encoding: String;
|
||||||
|
begin
|
||||||
|
if FNeedRTLAnsiValid then
|
||||||
|
exit(FNeedRTLAnsi);
|
||||||
|
{$IFDEF Windows}
|
||||||
|
FNeedRTLAnsi:=GetACP<>CP_UTF8;
|
||||||
|
{$ELSE}
|
||||||
|
FNeedRTLAnsi:=false;
|
||||||
|
{$ENDIF}
|
||||||
|
Lang := SysUtils.GetEnvironmentVariable('LC_ALL');
|
||||||
|
if Length(lang) = 0 then
|
||||||
|
begin
|
||||||
|
Lang := SysUtils.GetEnvironmentVariable('LC_MESSAGES');
|
||||||
|
if Length(Lang) = 0 then
|
||||||
|
begin
|
||||||
|
Lang := SysUtils.GetEnvironmentVariable('LANG');
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
i:=System.Pos('.',Lang);
|
||||||
|
if (i>0) then begin
|
||||||
|
Encoding:=copy(Lang,i+1,length(Lang)-i);
|
||||||
|
FNeedRTLAnsi:=(SysUtils.CompareText(Encoding,'UTF-8')=0)
|
||||||
|
or (SysUtils.CompareText(Encoding,'UTF8')=0);
|
||||||
|
end;
|
||||||
|
FNeedRTLAnsiValid:=true;
|
||||||
|
Result:=FNeedRTLAnsi;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure SetNeedRTLAnsi(NewValue: boolean);
|
||||||
|
begin
|
||||||
|
FNeedRTLAnsi:=NewValue;
|
||||||
|
FNeedRTLAnsiValid:=true;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function UTF8ToSys(const s: string): string;
|
||||||
|
begin
|
||||||
|
if NeedRTLAnsi then
|
||||||
|
Result:=s
|
||||||
|
else
|
||||||
|
Result:=UTF8ToAnsi(s);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SysToUTF8(const s: string): string;
|
||||||
|
begin
|
||||||
|
if NeedRTLAnsi then
|
||||||
|
Result:=s
|
||||||
|
else
|
||||||
|
Result:=AnsiToUTF8(s);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function FileExistsUTF8(const Filename: string): boolean;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.FileExists(UTF8ToSys(Filename));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function FileAgeUTF8(const FileName: String): Longint;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.FileAge(UTF8ToSys(Filename));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function DirectoryExistsUTF8(const Directory: string): Boolean;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.DirectoryExists(UTF8ToSys(Directory));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function FindFirstUTF8(const Path: string; Attr: Longint; out Rslt: TSearchRec
|
||||||
|
): Longint;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.FindFirst(UTF8ToSys(Path),Attr,Rslt);
|
||||||
|
Rslt.Name:=SysToUTF8(Rslt.Name);
|
||||||
|
{$IFDEF Unix}
|
||||||
|
Rslt.PathOnly:=SysToUTF8(Rslt.PathOnly);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
function FindNextUTF8(var Rslt: TSearchRec): Longint;
|
||||||
|
begin
|
||||||
|
Rslt.Name:=UTF8ToSys(Rslt.Name);
|
||||||
|
{$IFDEF Unix}
|
||||||
|
Rslt.PathOnly:=UTF8ToSys(Rslt.PathOnly);
|
||||||
|
{$ENDIF}
|
||||||
|
Result:=SysUtils.FindNext(Rslt);
|
||||||
|
Rslt.Name:=SysToUTF8(Rslt.Name);
|
||||||
|
{$IFDEF Unix}
|
||||||
|
Rslt.PathOnly:=SysToUTF8(Rslt.PathOnly);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure FindCloseUTF8(var F: TSearchrec);
|
||||||
|
begin
|
||||||
|
SysUtils.FindClose(F);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function FileSetDateUTF8(const FileName: String; Age: Longint): Longint;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.FileSetDate(UTF8ToSys(Filename),Age);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function FileGetAttrUTF8(const FileName: String): Longint;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.FileGetAttr(UTF8ToSys(Filename));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function FileSetAttrUTF8(const Filename: String; Attr: longint): Longint;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.FileSetAttr(UTF8ToSys(Filename),Attr);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function DeleteFileUTF8(const FileName: String): Boolean;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.DeleteFile(UTF8ToSys(Filename));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function RenameFileUTF8(const OldName, NewName: String): Boolean;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.RenameFile(UTF8ToSys(OldName),UTF8ToSys(NewName));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function FileSearchUTF8(const Name, DirList: String): String;
|
||||||
|
begin
|
||||||
|
Result:=SysToUTF8(SysUtils.FileSearch(UTF8ToSys(Name),UTF8ToSys(DirList)));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function FileIsReadOnlyUTF8(const FileName: String): Boolean;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.FileIsReadOnly(UTF8ToSys(Filename));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetCurrentDirUTF8: String;
|
||||||
|
begin
|
||||||
|
Result:=SysToUTF8(SysUtils.GetCurrentDir);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function SetCurrentDirUTF8(const NewDir: String): Boolean;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.SetCurrentDir(UTF8ToSys(NewDir));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CreateDirUTF8(const NewDir: String): Boolean;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.CreateDir(UTF8ToSys(NewDir));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function RemoveDirUTF8(const Dir: String): Boolean;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.RemoveDir(UTF8ToSys(Dir));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function ForceDirectoriesUTF8(const Dir: string): Boolean;
|
||||||
|
begin
|
||||||
|
Result:=SysUtils.ForceDirectories(UTF8ToSys(Dir));
|
||||||
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
DirPathExists
|
DirPathExists
|
||||||
------------------------------------------------------------------------------}
|
------------------------------------------------------------------------------}
|
||||||
|
Loading…
Reference in New Issue
Block a user