mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-10-31 22:29:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			331 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			331 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| {%MainUnit lazfileutils.pas}
 | |
| 
 | |
| function FilenameIsAbsolute(const TheFilename: string):boolean;
 | |
| begin
 | |
|   Result := Pos(':', TheFilename) > 1;
 | |
| end;
 | |
| 
 | |
| function FileOpenUTF8(const FileName: string; Mode: Integer): THandle;
 | |
| begin
 | |
|   Result := SysUtils.FileOpen(UTF8ToSys(FileName), Mode);
 | |
| end;
 | |
| 
 | |
| function FileCreateUTF8(const FileName: string): THandle;
 | |
| begin
 | |
|   Result := SysUtils.FileCreate(UTF8ToSys(FileName));
 | |
| end;
 | |
| 
 | |
| function FileCreateUTF8(const FileName: string; Rights: Cardinal): THandle;
 | |
| begin
 | |
|   Result := SysUtils.FileCreate(UTF8ToSys(FileName), Rights);
 | |
| end;
 | |
| 
 | |
| function FileCreateUtf8(const FileName: String; ShareMode: Integer;
 | |
|   Rights: Cardinal): THandle;
 | |
| begin
 | |
|   Result := SysUtils.FileCreate(UTF8ToSys(FileName), ShareMode, Rights);
 | |
| 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);
 | |
|   InvalidateFileStateCache(Filename);
 | |
| end;
 | |
| 
 | |
| function FileExistsUTF8(const Filename: string): boolean;
 | |
| begin
 | |
|   Result:=SysUtils.FileExists(UTF8ToSys(Filename));
 | |
| end;
 | |
| 
 | |
| function DirectoryExistsUTF8(const Directory: string): Boolean;
 | |
| begin
 | |
|   Result:=SysUtils.DirectoryExists(UTF8ToSys(Directory));
 | |
| end;
 | |
| 
 | |
| function FileAgeUTF8(const FileName: string): Longint;
 | |
| begin
 | |
|   Result:=SysUtils.FileAge(UTF8ToSys(Filename));
 | |
| end;
 | |
| 
 | |
| function FileSetDateUTF8(const FileName: String; Age: Longint): Longint;
 | |
| begin
 | |
|   Result := SysUtils.FileSetDate(UTF8ToSys(Filename), Age);
 | |
|   InvalidateFileStateCache(Filename);
 | |
| end;
 | |
| 
 | |
| function FileSizeUtf8(const Filename: string): int64;
 | |
| var
 | |
|   Info: TSearchRec;
 | |
|   Str: AnsiString;
 | |
| begin
 | |
|   Result := 0;
 | |
|   Str := Utf8ToAnsi(Filename);
 | |
|   if SysUtils.FindFirst (str, faAnyFile and faDirectory, Info) = 0 then
 | |
|   begin
 | |
|     Result := Info.Size;
 | |
|   end;
 | |
|   SysUtils.FindClose(Info);
 | |
| end;
 | |
| 
 | |
| {------------------------------------------------------------------------------
 | |
|   function ReadAllLinks(const Filename: string;
 | |
|     ExceptionOnError: boolean): string;
 | |
|  ------------------------------------------------------------------------------}
 | |
| function ReadAllLinks(const Filename: string;
 | |
|   ExceptionOnError: boolean): string;
 | |
| begin
 | |
|     Result:='';
 | |
| end;
 | |
| 
 | |
| function GetPhysicalFilename(const Filename: string;
 | |
|   OnError: TPhysicalFilenameOnError): string;
 | |
| begin
 | |
|   Result:=Filename;
 | |
| 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 DeleteFileUTF8(const FileName: String): Boolean;
 | |
| begin
 | |
|   Result:=SysUtils.DeleteFile(UTF8ToSys(Filename));
 | |
|   if Result then
 | |
|     InvalidateFileStateCache;
 | |
| end;
 | |
| 
 | |
| function RenameFileUTF8(const OldName, NewName: String): Boolean;
 | |
| begin
 | |
|   Result:=SysUtils.RenameFile(UTF8ToSys(OldName),UTF8ToSys(NewName));
 | |
|   if Result then
 | |
|     InvalidateFileStateCache;
 | |
| end;
 | |
| 
 | |
| function SetCurrentDirUTF8(const NewDir: String): Boolean;
 | |
| begin
 | |
|   Result:=SysUtils.SetCurrentDir(UTF8ToSys(NewDir));
 | |
| 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);
 | |
| end;
 | |
| 
 | |
| function FindNextUTF8(var Rslt: TSearchRec): Longint;
 | |
| begin
 | |
|   Rslt.Name:=UTF8ToSys(Rslt.Name);
 | |
|   Result:=SysUtils.FindNext(Rslt);
 | |
|   Rslt.Name:=SysToUTF8(Rslt.Name);
 | |
| end;
 | |
| 
 | |
| 
 | |
| function ExpandFileNameUTF8(const FileName: string; BaseDir: string): string;
 | |
| var
 | |
|   IsAbs: Boolean;
 | |
|   CurDir, Fn: String;
 | |
| begin
 | |
|   Fn := FileName;
 | |
|   ForcePathDelims(Fn);
 | |
|   IsAbs := FileNameIsAbsolute(Fn);
 | |
|   if (not IsAbs) then
 | |
|   begin
 | |
|     CurDir := GetCurrentDirUtf8;
 | |
|   end;
 | |
|   if IsAbs then
 | |
|   begin
 | |
|     Result := ResolveDots(Fn);
 | |
|   end
 | |
|   else
 | |
|   begin
 | |
|     if (BaseDir = '') then
 | |
|       Fn := IncludeTrailingPathDelimiter(CurDir) + Fn
 | |
|     else
 | |
|       Fn := IncludeTrailingPathDelimiter(BaseDir) + Fn;
 | |
|     Fn := ResolveDots(Fn);
 | |
|     //if BaseDir is not absolute then this needs to be expanded as well
 | |
|     if not FileNameIsAbsolute(Fn) then
 | |
|       Fn := ExpandFileNameUtf8(Fn, '');
 | |
|     Result := Fn;
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| function GetCurrentDirUTF8: String;
 | |
| begin
 | |
|   Result:=SysToUTF8(SysUtils.GetCurrentDir);
 | |
| end;
 | |
| 
 | |
| function FileIsExecutable(const AFilename: string): boolean;
 | |
| var
 | |
|   Fn: string;
 | |
|   MyLock: BPTR;
 | |
|   Info: TFileInfoBlock;
 | |
| begin
 | |
|   Result := False;
 | |
|   Fn := Utf8ToSys(AFilename);
 | |
|   MyLock := AmigaDos.Lock(PChar(Fn), SHARED_LOCK);
 | |
|   if PtrUInt(MyLock) <> 0 then
 | |
|   begin
 | |
|     Examine(MyLock, @Info);
 | |
|     Result := (Info.fib_Protection and FIBF_EXECUTE) <> 0;
 | |
|     AmigaDos.UnLock(MyLock);
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| procedure CheckIfFileIsExecutable(const AFilename: string);
 | |
| begin
 | |
|   // TProcess does not report, if a program can not be executed
 | |
|   // to get good error messages consider the OS
 | |
|   if not FileExistsUTF8(AFilename) then begin
 | |
|     raise Exception.Create(SysUtils.Format(lrsFileDoesNotExist, [AFilename]));
 | |
|   end;
 | |
|   if DirPathExists(AFilename) then begin
 | |
|     raise Exception.Create(SysUtils.Format(lrsFileIsADirectoryAndNotAnExecutable, [
 | |
|       AFilename]));
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| function FileIsSymlink(const AFilename: string): boolean;
 | |
| begin
 | |
|   Result := False;
 | |
| end;
 | |
| 
 | |
| procedure CheckIfFileIsSymlink(const AFilename: string);
 | |
| begin
 | |
|   // to get good error messages consider the OS
 | |
|   if not FileExistsUTF8(AFilename) then begin
 | |
|     raise Exception.Create(SysUtils.Format(lrsFileDoesNotExist, [AFilename]));
 | |
|   end;
 | |
|   if not FileIsSymLink(AFilename) then
 | |
|     raise Exception.Create(SysUtils.Format(lrsIsNotASymbolicLink, [AFilename]));
 | |
| end;
 | |
| 
 | |
| function FileIsHardLink(const AFilename: string): boolean;
 | |
| begin
 | |
|   Result := false;
 | |
| end;
 | |
| 
 | |
| function FileIsReadable(const AFilename: string): boolean;
 | |
| var
 | |
|   Fn: string;
 | |
|   MyLock: BPTR;
 | |
|   Info: TFileInfoBlock;
 | |
| begin
 | |
|   Result := False;
 | |
|   Fn := Utf8ToSys(AFilename);
 | |
|   MyLock := AmigaDos.Lock(PChar(Fn), SHARED_LOCK);
 | |
|   if PtrUInt(MyLock) <> 0 then
 | |
|   begin
 | |
|     Examine(MyLock, @Info);
 | |
|     Result := (Info.fib_Protection and FIBF_READ) <> 0;
 | |
|     AmigaDos.UnLock(MyLock);
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| function FileIsWritable(const AFilename: string): boolean;
 | |
| var
 | |
|   Fn: string;
 | |
|   MyLock: BPTR;
 | |
|   Info: TFileInfoBlock;
 | |
| begin
 | |
|   Result := False;
 | |
|   Fn := Utf8ToSys(AFilename);
 | |
|   MyLock := AmigaDos.Lock(PChar(Fn), SHARED_LOCK);
 | |
|   if PtrUInt(MyLock) <> 0 then
 | |
|   begin
 | |
|     Examine(MyLock, @Info);
 | |
|     Result := (Info.fib_Protection and FIBF_WRITE) <> 0;
 | |
|     AmigaDos.UnLock(MyLock);
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| 
 | |
| function IsUNCPath(const Path: String): Boolean;
 | |
| begin
 | |
|   Result := false;
 | |
| end;
 | |
| 
 | |
| function ExtractUNCVolume(const Path: String): String;
 | |
| begin
 | |
|   Result := '';
 | |
| end;
 | |
| 
 | |
| function GetFileDescription(const AFilename: string): string;
 | |
| var
 | |
|   Fn: string;
 | |
|   MyLock: BPTR;
 | |
|   Info: TFileInfoBlock;
 | |
| begin
 | |
|   Result := '';
 | |
|   Fn := Utf8ToSys(AFilename);
 | |
|   MyLock := AmigaDos.Lock(PChar(Fn), SHARED_LOCK);
 | |
|   if PtrUInt(MyLock) <> 0 then
 | |
|   begin
 | |
|     Examine(MyLock, @Info);
 | |
|     if (Info.fib_Protection and FIBF_ARCHIVE) <> 0 then
 | |
|       Result := Result + 'a';
 | |
|     if (Info.fib_Protection and FIBF_SCRIPT) <> 0 then
 | |
|       Result := Result + 's';
 | |
|     if (Info.fib_Protection and FIBF_PURE) <> 0 then
 | |
|       Result := Result + 'p';
 | |
|     if (Info.fib_Protection and FIBF_EXECUTE) <> 0 then
 | |
|       Result := Result + 'e';
 | |
|     if (Info.fib_Protection and FIBF_READ) <> 0 then
 | |
|       Result := Result + 'r';
 | |
|     if (Info.fib_Protection and FIBF_WRITE) <> 0 then
 | |
|       Result := Result + 'w';
 | |
|     if (Info.fib_Protection and FIBF_DELETE) <> 0 then
 | |
|       Result := Result + 'd';
 | |
|     AmigaDos.UnLock(MyLock);
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| 
 | |
| function GetAppConfigDirUTF8(Global: Boolean; Create: boolean = false): string;
 | |
| begin
 | |
|   Result := SysToUTF8(SysUtils.GetAppConfigDir(Global));
 | |
|   if Result = '' then exit;
 | |
|   if Create and not ForceDirectoriesUTF8(Result) then
 | |
|     raise EInOutError.Create(SysUtils.Format(lrsUnableToCreateConfigDirectoryS,[Result]));
 | |
| end;
 | |
| 
 | |
| function GetAppConfigFileUTF8(Global: Boolean; SubDir: boolean;
 | |
|   CreateDir: boolean): string;
 | |
| var
 | |
|   Dir: string;
 | |
| begin
 | |
|   Result := SysToUTF8(SysUtils.GetAppConfigFile(Global,SubDir));
 | |
|   if not CreateDir then exit;
 | |
|   Dir := ExtractFilePath(Result);
 | |
|   if Dir = '' then exit;
 | |
|   if not ForceDirectoriesUTF8(Dir) then
 | |
|     raise EInOutError.Create(SysUtils.Format(lrsUnableToCreateConfigDirectoryS,[Dir]));
 | |
| end;
 | |
| 
 | |
| function GetShellLinkTarget(const FileName: string): string;
 | |
| begin
 | |
|   Result := Filename;
 | |
| end;
 | |
| 
 | |
| procedure InitLazFileUtils;
 | |
| begin
 | |
|   //dummy
 | |
| end;
 | |
| 
 | |
| procedure FinalizeLazFileUtils;
 | |
| begin
 | |
|   //dummy
 | |
| end;
 | 
