There used to be an undocumented win32 function called 'PathSetDlgItemPath'.
A quick google for that function at ms.com turns up this page; and the first line of the description says that this is the function that underlies it.
Looking at the example for the latter page, its functionality can be described as: throw away characters, preceding the right-most backslash until the specified width is met; or, only ... is left preceding that backslash. (Ignoring that it uses pixels and the current font.)
So, a simple perl implementation might be:
#! perl -slw
use strict;
sub compactPath {
my( $p, $n ) = @_;
my $discard = length( $p ) - $n + 3;
my $min = $p =~ m[\\[^\\]+$];
$p =~ s[.{$min,$discard}(?=\\[^\\]+$)][...];
return $p;
}
my $path = "C:\\path1\\path2\\sample.txt";;
print $path;
print compactPath( $path, $_ ) for reverse 0 .. length $path;
__END__
C:\test>junk47
C:\path1\path2\sample.txt
C:\path1\pa...\sample.txt
C:\path1\p...\sample.txt
C:\path1\...\sample.txt
C:\path1...\sample.txt
C:\path...\sample.txt
C:\pat...\sample.txt
C:\pa...\sample.txt
C:\p...\sample.txt
C:\...\sample.txt
C:...\sample.txt
C...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
...\sample.txt
Does that meet your expectations?
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
In the absence of evidence, opinion is indistinguishable from prejudice.
|