in reply to Shortening paths for display
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?
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Shortening paths for display
by morelenmir (Beadle) on Oct 23, 2016 at 01:42 UTC |