Softtech
asked on
Abbreviated/shortened file paths (c:\program files\borl...\bde.exe)
Does anyone have any code that creates an abbreviated/truncated string representing a file or folder path like:
c:\program files\borl...\bde.exe
There are times when you want to display a TLabel or TString that displays the full path to a file. However, sometimes the path is so long that it spills off the form. I've seen other applications abbreviate long file paths by inserting dots ... in the middle of the path.
Anyone have code that does this?
Thanks.
c:\program files\borl...\bde.exe
There are times when you want to display a TLabel or TString that displays the full path to a file. However, sometimes the path is so long that it spills off the form. I've seen other applications abbreviate long file paths by inserting dots ... in the middle of the path.
Anyone have code that does this?
Thanks.
ASKER
Thanks, but the code is badly flawed.
The problem with the code is that it inserts \...\ when it needs not. For instance,...
GetShortPath('c:\windows\w in.ini',64 );
...will return the crazy:
c:\windows\...\...\...\... \...\win.i ni
Then at other times it totally inserts nothing. E.g.
GetShortPath('D:\ZIP Code Access\2000Version\MO Test\disk9.mdb',32)
Even though 'D:\ZIP Code Access\2000Version\MO Test\disk9.mdb' is 49 characters, the function inserts no \...\ at all.
The problem with the code is that it inserts \...\ when it needs not. For instance,...
GetShortPath('c:\windows\w
...will return the crazy:
c:\windows\...\...\...\...
Then at other times it totally inserts nothing. E.g.
GetShortPath('D:\ZIP Code Access\2000Version\MO Test\disk9.mdb',32)
Even though 'D:\ZIP Code Access\2000Version\MO Test\disk9.mdb' is 49 characters, the function inserts no \...\ at all.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
function GetShortPath(Path: string; Count: Integer): string;
procedure Slashes(var Str: string; var Num: Integer);
var
Position, Index: Integer;
begin
Index:=0;
repeat
Position:=Pos('\', Str);
Delete(Str,1,Position);
if Position<>0 then Inc(Index);
if (Index=Num)and(Num<>0) then break;
until Position=0;
Num:=Index;
end;
var
Num, NewNum, P: Integer;
Str: string;
begin
Str:=Path;
Num:=0;
Slashes(Path, Num);
while (Length(Str)>Count)and(N
begin
NewNum:=Num div 2;
Path:=Str;
Slashes(Path, NewNum);
P:=Pos(Path, Str);
Delete(Str,P, Length(Path));
NewNum:=2;
Slashes(Path, NewNum);
Str:=Str+'...\'+Path;
Dec(Num);
end;
Result:=Str;
end;
From Greatis.com
John