PathManipulate – A custom .Net Class for displaying long file paths in different formats


Here is a Class that can be used to display long filepaths in different formats depending on your needs. You can specify a desired length, the location of ellipses, and whether the filename is always displayed. It can also be used to return only the filename (with extension) when passed a full path.

Updates will be made to it as they’re available.

Hope someone finds it useful. Any efficiencies that can be made, let me know!

PathManipulate Screenshot

Download the .vb file: PathManipulate.vb (Right click and “Save Target As”)

Source Code:

''' <summary>  
''' <para>Class allows the formatting of filepaths for displaying in different formats. All methods return a String object.</para>  
''' </summary>  
Public Class PathManipulate

    ''' <summary>  
    ''' <para>Returns the folder path that the supplied full filenpath resides in. Includes trailing '\'</para>  
    ''' </summary>  
    Public Function ShowDirectory(ByVal LongPath As String)
        Dim FilePath As String
        'START AT BEGINNING OF FULL PATH AND END AT THE LAST OCCURRENCE OF '\'
        FilePath = LongPath.Substring(0, LongPath.LastIndexOf("\") + 1)

        Return FilePath
    End Function

    ''' <summary>  
    ''' <para>Returns only the filename (with extension) of the supplied filepath. Removes leading '\'.</para>  
    ''' </summary>  
    Public Function ShowFilenameOnly(ByVal LongPath As String)
        Dim FileName As String
        FileName = LongPath.Substring(LongPath.LastIndexOf("\") + 1, LongPath.Length - LongPath.LastIndexOf("\") - 1)

        Return FileName
    End Function

    ''' <summary>  
    ''' <para>Returns filepath shortened with ellipses in the middle.</para>  
    ''' </summary>  
    Public Function ShrinkLongFilepath(ByVal LongPath As String) As String
        Dim ReturnPath, StartPath, FileName As String
        FileName = LongPath.Substring(LongPath.LastIndexOf("\") + 1, LongPath.Length - LongPath.LastIndexOf("\") - 1)

        'ELLIPSES WILL BE IN THE MIDDLE
        StartPath = LongPath.Substring(0, LongPath.Length - LongPath.LastIndexOf("\") - 3)
        ReturnPath = StartPath &amp;amp; "...\" &amp;amp; FileName

        Return ReturnPath
    End Function

    ''' <summary>  
    ''' <para>Returns filepath shortened to desired length, if supplied, with ellipses in middle unless overridden with parameter.</para>  
    ''' </summary>  
    Public Function ShrinkLongFilepath(ByVal LongPath As String, ByVal EllipsesAtEnd As Boolean, Optional ByVal DesiredLength As Integer = 15, Optional ByVal AlwaysDisplayFilename As Boolean = False) As String
        Dim ReturnPath, StartPath, EndPath, FileName As String

        'DESIRED LENGTH MUST BE AT LEAST 15
        If DesiredLength < 15 Then
            DesiredLength = 15
        End If

        'STRIPS ONLY THE FILENAME
        FileName = LongPath.Substring(LongPath.LastIndexOf("\"), LongPath.Length - LongPath.LastIndexOf("\"))

        If AlwaysDisplayFilename Then
            If FileName.Length + 3 < DesiredLength Then
                'ELLIPSES WILL BE IN THE MIDDLE
                StartPath = LongPath.Substring(0, (DesiredLength / 2) - 3)
                EndPath = LongPath.Substring(StartPath.Length, DesiredLength - StartPath.Length)
                ReturnPath = StartPath &amp;amp; "..." &amp;amp; FileName
            Else
                ReturnPath = "..." &amp;amp; FileName
            End If
        Else
            If EllipsesAtEnd Then 'IF ELLIPSES AT END OF FILEPATH
                ReturnPath = LongPath.Substring(0, DesiredLength - 3)
                ReturnPath &amp;amp;= "..."
            Else 'ELLIPSES WILL BE IN THE MIDDLE
                If LongPath.Length < DesiredLength Then
                    StartPath = LongPath.Substring(0, LongPath.IndexOf("\") + 1)
                    EndPath = LongPath.Substring(StartPath.Length + 3, LongPath.Length - (StartPath.Length + 3))
                    ReturnPath = StartPath &amp;amp; "..." &amp;amp; EndPath
                Else
                    StartPath = LongPath.Substring(0, LongPath.IndexOf("\") + 1)
                    EndPath = LongPath.Substring(StartPath.Length + 3, DesiredLength - (StartPath.Length + 3))
                    ReturnPath = StartPath &amp;amp; "..." &amp;amp; EndPath
                End If
            End If
        End If

        Return ReturnPath
    End Function

End Class

Some sample usage:

Dim pm As New PathManipulate 'Create and instantiate a new PathManipulate Object
Dim di As New DirectoryInfo(folderpath) 'A full folderpath, possibly from a FolderBrowserDialog
Dim myFiles As FileInfo() = di.GetFiles("*.*")
Dim fi As FileInfo

For Each fi In myFiles
     ListBox1.Items.Add(fi.FullName) 'Shows unaltered full path
     ListBox2.Items.Add(pm.ShowDirectory(fi.FullName)) 'Adds manipulated path
Next

'Quick usage. Takes a full path and shrinks it.
pm.ShrinkLongFilepath(fi.FullName)

'Shrinks to 40 characters with ellipses in the middle.
pm.ShrinkLongFilepath(fi.FullName, False, 40, False)

'Returns the full directory path  for the supplied file.
pm.ShowDirectory(fi.FullName)

'Shows filenames regardless of desired length.
pm.ShrinkLongFilepath(fi.FullName, False, 20, True)

'Shrink to 20 characters with ellipses at the end.
pm.ShrinkLongFilepath(fi.FullName, True, 20, False)


Comments welcome.

Like it? Share it:

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Notify me of follow-up comments via e-mail. You can also subscribe without commenting.