Contributor: ANGUS JOHNSON { A number of people have been asking about the API function GetFullPathName recently. This function does not do what its name implies. I have written a function which does convert a short pathname into a long pathname and thought I would share it with you. NB: I haven't done any major checks for bugs so no guarantees! HTH Angus Johnson ------------------------------------------------8<-------------------------- -------------} function GetLongFileName(fn: string): string; var l,r: integer; path: string; sr: TSearchRec; begin {return '' if invalid path} if (length(fn)<3) or (pos(':\',fn)<>2) then begin result := ''; exit; end; {return if root directory} if length(fn) =3 then begin result := uppercase(fn); exit; end; path := uppercase(copy(fn,1,3)); {path = root dir} l := 4; while true do begin {top of loop} r := l; while (fn[r] <> '\') and (r <= length(fn)) do inc(r); if Findfirst(path+copy(fn,l,r-l),faAnyfile,sr) = 0 then begin {OK} if (sr.attr and faDirectory) <> 0 then begin {yes, it is a directory} path := path + sr.name+'\'; FindClose(sr); if r >= length(fn) then begin result := path; exit; end; l := r+1; end else begin {not a directory!} if r > length(fn) then dec(r); if (fn[r] = '\') or (r <> length(fn)) then {an error!} result := '' else begin {must be a file} result := path + sr.name; {OK!} end; FindClose(sr); exit; end; end else begin {An Error!!!!} result := ''; FindClose(sr); exit; end; end; {bottom of loop} end;