[fpc-pascal] cross os symbolic link handling

Michael Van Canneyt michael at freepascal.org
Fri Oct 31 18:43:06 CET 2008



On Fri, 31 Oct 2008, Marc Santhoff wrote:

> Hi,
> 
> is there any function or set of functions for handling symbolic links
> inside the file system at an os independant level in fpcs libraries?
> 
> Unix-like systems have soft symlinks (Linux, FreeBSD), Windows has .lnk
> files upt to XP and AFAIR Windows Vista has some other stuff I don't
> know about yet.
> 
> What I'd need would be sth. like:
> 
> function IsLink(<filehandle or name>): boolean;
> function GetLinkTarget(<filehandle or name>): <filehandle or name>;
> 
> Any help on this topic is welcome ... ;)

Fpc 2.3.1 supports faSymLink in the FindFirst/FindNext series of calls.
If it is included in the attributes, then symbolic links are included as 
symbolic links and not as the file/dir they refer to.

This works cross-platform. So you could do something like

function IsLink(AFileName : string): boolean;

Var
  Info : TSearchRec;

begin
  Result:=FindFirst(AFileName,faSymLink,info)=0;
  If Result then
    begin
    Result:=(info.attr and faSymLink)=faSymLink;
    FindClose(info);
    end;
end;


Michael.



More information about the fpc-pascal mailing list