Résoudre un chemin vers un fichier

Résolu
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 - 4 févr. 2009 à 19:10
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 - 5 févr. 2009 à 12:39
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

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
4 févr. 2009 à 19:57
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)
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
4 févr. 2009 à 20:04
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
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
5 févr. 2009 à 12:27
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"
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
4 févr. 2009 à 19:37
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
4 févr. 2009 à 19:40
PS : Arrête de mettre des / là où il faut des \
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
4 févr. 2009 à 19:54
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.... 
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
4 févr. 2009 à 20:00
En effet, question mal posée ...
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 3
4 févr. 2009 à 20:03
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/ ***
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 3
4 févr. 2009 à 20:05
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/ ***
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 3
4 févr. 2009 à 21:21
Non, ça ne marche pas :(
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 3
4 févr. 2009 à 21:22
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/ ***
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
5 févr. 2009 à 08:25
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)
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 3
5 févr. 2009 à 12:14
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/ ***
0
cs_veler Messages postés 723 Date d'inscription dimanche 26 novembre 2006 Statut Membre Dernière intervention 23 janvier 2013 3
5 févr. 2009 à 12:39
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/ ***
0