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?
In reply to Re: Shortening paths for display
by BrowserUk
in thread Shortening paths for display
by morelenmir
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |