Résoudre un chemin vers un fichier

Résolu
Signaler
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
-
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
-
Salut !

J'ai un problème qui est le suivant :
Admettons que j'ai une valeur qui est égale à C:/test1/test2/test3/fichier1, on dit que c'est le chemin actuel...
Maintenant on a sélectionner le chemin C:/test1/test2/essais/fichier2 dans un openfiledialog....

J'aimerais obtenir le chemin entre C:/test1/test2/test3/fichier1 et C:/test1/test2/essais/fichier2

Il y a quelque temps, j'ai fait un algorithme pour faire ça, mais ça marche uniquement avec ce genre d'exemple :
chemin actuel : C:/test1/test2/test3/fichier1
nouveau chemin : C:/test1/test2/test3/test4/fichier2
mon algorithme retourne la valeur test4/fichier2.....

Mais bon, je ne trouve pas comment faire pour qu'il me retourne ..\essais\fichier2....
Vous voyez ce que je veux dire ou pas?

Alors comment je peut fait ça? merci d'avance^^

 
*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***

14 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Re moi
Ma boule de cristal me sussure que tu sembles vouloir parler de la conversion en chemin relatif, avec des ..\ pour descendre d'un cran ?

   Dim
Chemin1 AsString = "C:/test1/test2/test3/fichier1 "

   Dim Chemin2 AsString = "C:/test1/test2/essais/fichier2"

   Dim Resultat AsString

   Dim r AsLong

   Dim t AsLong

   Dim aaa AsString()
   Dim
bbb AsString()

   aaa = Split(Chemin1, "/"
)
   bbb = Split(Chemin2, "/"
)
   Resultat = ""
   For
r = 0 To aaa.Length - 1
      If aaa(r).ToUpper <> bbb(r).ToUpper ThenExitFor
   Next r
   ' Différence trouvée

   For t = r To bbb.Length - 2   ' -1 pour l'index 0 et -1 pour le nom du fichier
      Resultat = Resultat + ".."

   Next t
   ' Ajoute le nom du fichier qui est à la fin
   Resultat = Resultat + bbb(bbb.Length - 1)
   MsgBox(Resultat)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
lol, encore moi
J'ai oublié de remettre le chemin montant (essais)
Ajoute ça après le dernier For-Next :

For r = r
To bbb.Length - 2   Resultat = Resultat & bbb(r) &

""

Next
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Bah tu es grand, tu sais débuguer ?
En fait, c'est parce que j'ai pris comme base le tableau bbb au lieu de aaa : Suffit donc de modifier le nom du tableau utilisé dans la boucle qui suit le commentaire "Différence trouvée"
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
Ca m'étonne de toi ...
   Dim Chemin1
As
String =
"C:/test1/test2/test3/fichier1 "
   Dim Chemin2
As
String =
"C:/test1/test2/essais/fichier2"
   Dim r
As
Long
   For r = 1
To Len(Chemin1)

      If Chemin1.Substring(r, 1).ToUpper <> Chemin2.Substring(r, 1).ToUpper
Then
         MsgBox(Chemin2.Substring(r))

         Exit
For
      End
If
   Next

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
PS : Arrête de mettre des / là où il faut des \
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
47
salut,



[../auteur/JACK/2204.aspx jack]

, ton code ressemble étrangement à chemin1<> chemin2 ^^

la question est sans doute plus, non pas de récupérer même la différence ("

test3/fichier1

" <> "

essais/fichier2

" ? ou l'inverse?? ), mais de composer chemin2 depuis chemin1

ici donc => "

..\..\essais\fichier2

"

enfin on dirait
question trop claire pour lancer vs.... 
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
En effet, question mal posée ...
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
3
Arf, non, ça ne fait pas ce que je veux, attend, voici le code que j'ai déjà fait :
Shared Function Ouvrir_Fichier(ByVal Ctrl As OpenFileDialog, Optional ByVal FileName_Complete As String "", Optional ByVal FileName_Path As String "") As String
        Try
            If Ctrl.ShowDialog = DialogResult.OK Then
                Dim ret As String = Nothing
                Dim dossier() As String = Split(Ctrl.FileName, "", -1)
                Dim dossier_2() As String = Split(FileName_Complete, "", -1)
                If dossier.Length - 1 >= dossier_2.Length - 1 Then
                    For i As Integer = 0 To dossier.Length - 1
                        If dossier_2.Length > i Then Array.Resize(dossier_2, dossier_2.Length + 1)
                        If dossier(i) <> dossier_2(i) Then
                            ret = ret & "" & dossier(i)
                        Else
                            ret = ret & ""
                        End If
                    Next i
                Else
                    For i As Integer = 0 To dossier_2.Length - 1
                        If dossier.Length > i Then Array.Resize(dossier, dossier.Length + 1)
                        If dossier_2(i) <> dossier(i) Then
                            ret = ret & "" & dossier(i)
                        Else
                            ret = ret & ""
                        End If
                    Next i
                End If

                If Not FileName_Path = Nothing Then
                    If My.Computer.FileSystem.FileExists(FileName_Path & ret) = False Then
                        If MsgBox(LANGUAGEs.Val35 & " " & Ctrl.FileName & " " & LANGUAGEs.Val36, MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
                            My.Computer.FileSystem.CopyFile(Ctrl.FileName, FileName_Path & "" & Ctrl.SafeFileName, True)
                            Return Ctrl.SafeFileName
                        Else
                            Return Ctrl.FileName
                        End If
                    Else
                        Return ret.Substring(1, ret.Length - 1)
                    End If
                Else
                    Return Ctrl.FileName
                End If
            Else
                Return "CANCEL!"
            End If
        Catch err As Exception
            Deboguer.Err = err
            Deboguer.ShowDialog()
        End Try
        Return Nothing
    End Function

Désolé, il n'y a pas de commentaires. Donc comme je l'ai dit, cette fonction permet juste d'obtenir essais/fichier1 quand on a un chemin du genre C:/test/essais/fichier1 et que le chemin duquel on part est C:/test/fichier2....
Bon, c'est compliqué à expliquer, alors essayez cette fonction en mettant le chemin actuel dans FileName_Complete et le dossier dans lequel ce trouve ce fichier dans FileName_Path

Exemple :
MsgBox(Ouvrir_Fichier(OpenFileDialog1, "C:/test/fichier1", "C:/test")
Si vous sélectionner un fichier situé dans C:/test/test2/test3/fichier2, cette fonction va vous renvoyer test2/test3/fichier2...... Voila

Mais je ne sais toujours pas comment faire pour que :
Si j'ai MsgBox(Ouvrir_Fichier(OpenFileDialog1, "C:/test/fichier1", "C:/test")
Et que je sélectionner le fichier C:/boot.ini, il le renvoi ../boot.ini

@+++

 
*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
3
Oulalala, je n'ai vu que les 2 premier message, lol, attendez je vais voir le reste XD

 
*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
3
Non, ça ne marche pas :(
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
3
J'avoue que je suis étonné :
J'ai créer une dll qui permet de lire un fichier html en intégralité : les balises, savoir si on est dedans ou pas, lire les attribut, les modifier.... j'ai fait pareil pour du css, j'ai également fait une intellisense et une tabulation intelligente avec tout ça.... et j'arrive pas à faire ce fichu système XD

 
*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Ca marche pas ne veut rien dire : donne des explications
Vérifie tes histoires de / et de \ : l'exemple fourni tient compte des / alors que peyt-être tu n'en as pas.
En tous les cas, chez ça marche très bien.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
3
Enfin oui, ton code marche très bien, mais, comment dire, il ne fait pas vraiment ce qu'il faut. En fait, ba, euh, je ne sais pas trop comment l'expliquer.
SI mon répertoire de démarrage (chemin1) est C:/test/test2/test3/fichier et que le chemin2 est C:/test/essais/fichier, il va me retourner uniquement ../essais/fichier au lieu de ../../fichier.
Enfin je ne sais pas trop comment le dire car il n'y a pas tout ça. Essais de voir le code en faisant plusieurs teste avec différent exemples

 
*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***
Messages postés
723
Date d'inscription
dimanche 26 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2013
3
Yeeeeesss !!!! Ca marche !!! En effet, pas compliqué à déboguer, j'ai pas d'excuse lol. Merci pour votre aide, ça va beaucoup mieux =D

Merci merci merci !!!
@+++

 
*** ebaudoux@club.fr ***
*** http://www.velersoftware.fr.nf/ ***