PathCompactPathEx (shlwapi)
Last changed: -92.27.131.29

.
Summary
Truncates a path to fit within a certain number of characters by replacing path components with ellipses.

C# Signature:

[DllImport("shlwapi.dll", CharSet=CharSet.Auto)]
static extern bool PathCompactPathEx([Out] StringBuilder pszOut, string szPath, int cchMax, int dwFlags);

VB Signature:

<DllImport("shlwapi.dll", CharSet:=CharSet.Auto)> _
Shared Function PathCompactPathEx(ByVal pszOut As StringBuilder, _
                   ByVal szPath As String, _
                   ByVal cchMax As Integer, _
                   ByVal dwFlags As Integer) As Boolean
End Function

User-Defined Types:

None.

Notes:

If you have an HDC, take a look at PathCompactPath

Tips & Tricks:

Please add some!

Sample Code:

using System;
using System.Runtime.InteropServices;
using System.Text;

namespace CompactPathCmd
{
    /// <summary>
    /// Test code for PathCompactPathEx
    /// </summary>
    class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            string longPath = "c:\\a\\very\\very\\long\\path\\that\\needs\\to\\be\\shortened\\by\\calling\\the\\PathCompactpathEx";
            int length = 40;

            string result = CompactPath(longPath, length);
            Console.WriteLine("     1     2     3     4     5     6     7");
            Console.WriteLine("1234567890123456789012345678901234567890123456789012345678901234567890123456789");
            Console.WriteLine(result);
            // displays : "c:\a\very\very\long...\PathCompactpathEx"
        }

        [DllImport("shlwapi.dll", CharSet=CharSet.Auto)]
        static extern bool PathCompactPathEx([Out] StringBuilder pszOut, string szPath, int cchMax, int dwFlags);

        public static string CompactPath(string longPathName, int wantedLength)
        {
            // NOTE: You need to create the builder with the required capacity before calling function.
            // See http://msdn.microsoft.com/en-us/library/aa446536.aspx
            StringBuilder sb = new StringBuilder(wantedLength + 1);
            PathCompactPathEx(sb, longPathName, wantedLength + 1, 0);
            return sb.ToString();
        }

    }

}

Alternative Managed API:

Do you know one? Please contribute it!

Documentation