Creation de chemins relatifs

Description

J'etais surpris de ne pas trouver d'avantage de sources sur le net concernant la creation de fichiers relatifs, donc j'ai cre cette fonction.

Cette fonction va cree un chemin relatif lui donnant un chemin de dossier de reference
'Example 1
'PathReference = C:\Documents and Settings\Jeremy\Desktop numUp = 0
'PathLink = C:\Documents and Settings\Jeremy\Desktop\simulation numDiv = 4
'Return = .\simulation

'Example 2
'PathReference = C:\Documents and Settings\Jeremy\Desktop numUp = 3
'PathLink = C:\simulation numDiv = 2
'Return = ..\..\..\simulation

'Example 3
'PathReference = C:\Documents and Settings\Jeremy\Desktop numUp = 3
'PathLink = C:\Test\Jeremy\Desktop\simulation numDiv = 2
'Return = ..\..\..\Test\Jeremy\Desktop\simulation

'Example 4
'PathReference = C:\Documents and Settings\Jeremy\Desktop numUp = 2
'PathLink = C:\Documents and Settings\Test\Folder\simulation numDiv = 3
'Return = ..\..\Test\Folder\simulation

'Example 5
'PathReference = C:\Documents and Settings\Jeremy\Desktop numUp = 1
'PathLink = C:\Documents and Settings\Jeremy\Test numDiv = 4
'Return = ..\Test

'Example 6
'PathReference = C:\Documents and Settings\Jeremy\Desktop numUp = 3
'PathLink = C:\Documents and Settings numDiv = 2
'Return = ..\..

Voici la fonction, prete a copier coller!

Source / Exemple :


Public Function GetRelativePath(ByVal PathReference As String, ByVal PathLink As String) As String
        'Example 1
        'PathReference  = C:\Documents and Settings\Jeremy\Desktop              numUp = 0
        'PathLink       = C:\Documents and Settings\Jeremy\Desktop\simulation   numDiv = 4
        'Return         = .\simulation                                          

        'Example 2
        'PathReference  = C:\Documents and Settings\Jeremy\Desktop              numUp = 3
        'PathLink       = C:\simulation                                         numDiv = 2
        'Return         = ..\..\..\simulation                                   

        'Example 3
        'PathReference  = C:\Documents and Settings\Jeremy\Desktop              numUp = 3
        'PathLink       = C:\Test\Jeremy\Desktop\simulation                     numDiv = 2
        'Return         = ..\..\..\Test\Jeremy\Desktop\simulation               

        'Example 4
        'PathReference  = C:\Documents and Settings\Jeremy\Desktop              numUp = 2
        'PathLink       = C:\Documents and Settings\Test\Folder\simulation      numDiv = 3
        'Return         = ..\..\Test\Folder\simulation                          

        'Example 5
        'PathReference  = C:\Documents and Settings\Jeremy\Desktop              numUp = 1
        'PathLink       = C:\Documents and Settings\Jeremy\Test                 numDiv = 4
        'Return         = ..\Test                                               

        'Example 6
        'PathReference  = C:\Documents and Settings\Jeremy\Desktop              numUp = 3
        'PathLink       = C:\Documents and Settings                             numDiv = 2
        'Return         = ..\..                  

        'avant de faire quoi que ce soit, on verifie si les chemins sont les memes
        'si c vrai, on exit
        If PathReference = PathLink Then
            Return ""
            Exit Function
        End If

        Dim ArrPathRef(), ArrPathLink() As String 'tableau des noms de dossiers
        Dim Path As String  'le chemin relatif a renvoyer
        Dim k, maxLength As Integer 'un counter
        Dim numUp As Integer  'le nombre de dossier a monter dans le chemin de ref jusqu'a la divergence
        Dim numDiv As Integer = 1  'le nombre de dossier depuis la racine jusqu'a la divergence (la racine est 1)

        'On cree l'array de dossier
        ArrPathRef = Split(PathReference, "\")
        ArrPathLink = Split(PathLink, "\")

        'si les 2 chemins sont dans une partion differente
        'on renvoi le chemin entier de celui a lier
        If ArrPathRef(0) <> ArrPathLink(0) Then
            Return PathLink
            Exit Function
        End If

        'on cherche le chemin le plus long
        If ArrPathLink.Length > ArrPathRef.Length Then
            maxLength = ArrPathLink.Length
        Else
            maxLength = ArrPathRef.Length
        End If

        'obtention du point de divergence
        For k = 0 To maxLength
            'on incremente jusqu'a la fin des chemins ou 
            'l'observation d'une divergence entre les chemins
            If k > ArrPathLink.Length - 1 _
            OrElse k > ArrPathRef.Length - 1 _
            OrElse ArrPathLink(k) <> ArrPathRef(k) _
            Then
                Exit For
            End If

            numDiv = numDiv + 1
        Next

        'maintenant avec le point de divergence, obtention du nombre
        'de dossier a monter ou a descendre 
        numUp = ArrPathRef.Length - numDiv + 1

        'on reconstruit la chaine
        Path = ""

        'On ajoute la partie a monter
        If numUp = 0 Then
            Path = "."
        Else
            For k = 0 To numUp - 1
                If k = 0 Then
                    Path = ".."
                Else
                    Path = Path & "\.."
                End If
            Next
        End If

        'on ajoute la parti a descendre
        For k = (numDiv - 1) To ArrPathLink.Length - 1
            Path = Path & "\" & ArrPathLink(k)
        Next

        Return Path
    End Function

Conclusion :


Ca marche tant que les dossiers sont dans la meme partition, sinon ca plante... si qqun trouve, merci de poster!

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.