Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

chemins relatifs

9 réponses
Avatar
Marc
Bonjour,

je voudrais savoir si il existe des fonctions qui permettent de gerer les
chemins en mode relatif (relative paths) et qui sauraient effectuer
directement la conversion avec les "." et les ".." en fonction du chemin
actuel de l'appli VB(A)?

Merci pour votre aide.

9 réponses

Avatar
jean-marc
"Marc" <fun.x@#nospam#caramail.com> wrote in message
news:4013f648$0$7151$
Bonjour,

je voudrais savoir si il existe des fonctions qui permettent de gerer les
chemins en mode relatif (relative paths) et qui sauraient effectuer
directement la conversion avec les "." et les ".." en fonction du chemin
actuel de l'appli VB(A)?



Hello,
toutes les fonctrions de fichiers de VB savent faire cela.
Par exmple:

dim f as integer
open "....pubtempmonfichier.txt" for input as #f

va ouvrir le fichier qui se trouve dans pubtemp, en cherchant 2 niveaux de
répertoires en dessous de ton appli.

Tu disposes aussi de App.Path, qui retourne le chemin de ton exécutable.

Jean-Marc
Avatar
marcel Bultez
c'est peut-être le contraire qui est
demandé ? convertir un chemin
absolu en chemin relatif ?
si c'est la cas, je n'ai rien trouvé,
et j'ai un petit bout de code qui
réalise cela. Si intéressé : le
dire, envoi ici même.
cordialement.
Avatar
Marc
Oui c'est cela:
En fait, je cherche a convertir:
1. un relatif vers absolu
2. un absolu vers relatif (en fonction de App.Path)



"marcel Bultez" wrote in message
news:%
c'est peut-être le contraire qui est
demandé ? convertir un chemin
absolu en chemin relatif ?
si c'est la cas, je n'ai rien trouvé,
et j'ai un petit bout de code qui
réalise cela. Si intéressé : le
dire, envoi ici même.
cordialement.





Avatar
marcel Bultez
transforme chemin absolu en chemin relatif

Public Function CheminRelatif _
(ByVal Chact As String, ByVal Chref As String) As String
'ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ
'Ÿ Renvoie l'adresse de Chact (dossier) par rapport à ChRef
'Ÿ Exemple : Chact="c:program files" , ChRef="c:windows"
'Ÿ ==> CHEMINRELATIF = "..program files"
'ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ
Dim Morceau1() As String, Morceau2(), Prov As String
Dim Chemin1, CheminRef As String
Dim TailleMorceau1 As Integer, TailleMorceau2, I, j As Integer
ReDim Morceau1(1 To 1), Morceau2(1 To 1)
Chemin1 = Chact
If Right(Chemin1, 1) = "" Then
Chemin1 = Left(Chemin1, Len(Chemin1) - 1)
End If
CheminRef = Chref
If Right(CheminRef, 1) = "" Then
CheminRef = Left(CheminRef, Len(CheminRef) - 1)
End If
For I = 1 To Len(Chemin1) '* pour chemin1
'ŸŸŸŸ Marque chaque élément du chemin dans un tableau
Select Case Mid(Chemin1, I, 1)
Case Is = ""
TailleMorceau1 = TailleMorceau1 + 1
ReDim Preserve Morceau1(1 To TailleMorceau1)
Morceau1(TailleMorceau1) = Prov
Prov = vbNullString
Case Else
Prov = Prov & Mid(Chemin1, I, 1)
End Select
Next I
'ajoute le dernier élément (non précédé d'un slash)
TailleMorceau1 = TailleMorceau1 + 1
ReDim Preserve Morceau1(1 To TailleMorceau1)
Morceau1(TailleMorceau1) = Prov
For I = 1 To Len(CheminRef) ' pour CheminRef
Select Case Mid(CheminRef, I, 1)
Case Is = ""
TailleMorceau2 = TailleMorceau2 + 1
ReDim Preserve Morceau2(1 To TailleMorceau2)
Morceau2(TailleMorceau2) = Prov
Prov = vbNullString
Case Else
Prov = Prov & Mid(CheminRef, I, 1)
End Select
Next I
TailleMorceau2 = TailleMorceau2 + 1
ReDim Preserve Morceau2(1 To TailleMorceau2)
Morceau2(TailleMorceau2) = Prov
Prov = vbNullString
For I = 1 To TailleMorceau2 - 1
Prov = Prov & ".."
Next I
For I = 2 To TailleMorceau1
Prov = Prov & Morceau1(I) & ""
Next I
CheminRelatif = Left(Prov, Len(Prov) - 1) 'retire le "" final
End Function

pour le contraire, cela se fait "tout seul"
cordialement
Avatar
marcel Bultez
transforme chemin absolu en chemin relatif

Public Function CheminRelatif _
(ByVal Chact As String, ByVal Chref As String) As String
'ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ
'Ÿ Renvoie l'adresse de Chact (dossier) par rapport à ChRef
'Ÿ Exemple : Chact="c:program files" , ChRef="c:windows"
'Ÿ ==> CHEMINRELATIF = "..program files"
'ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ
Dim Morceau1() As String, Morceau2(), Prov As String
Dim Chemin1, CheminRef As String
Dim TailleMorceau1 As Integer, TailleMorceau2, I, j As Integer
ReDim Morceau1(1 To 1), Morceau2(1 To 1)
Chemin1 = Chact
If Right(Chemin1, 1) = "" Then
Chemin1 = Left(Chemin1, Len(Chemin1) - 1)
End If
CheminRef = Chref
If Right(CheminRef, 1) = "" Then
CheminRef = Left(CheminRef, Len(CheminRef) - 1)
End If
For I = 1 To Len(Chemin1) '* pour chemin1
'ŸŸŸŸ Marque chaque élément du chemin dans un tableau
Select Case Mid(Chemin1, I, 1)
Case Is = ""
TailleMorceau1 = TailleMorceau1 + 1
ReDim Preserve Morceau1(1 To TailleMorceau1)
Morceau1(TailleMorceau1) = Prov
Prov = vbNullString
Case Else
Prov = Prov & Mid(Chemin1, I, 1)
End Select
Next I
'ajoute le dernier élément (non précédé d'un slash)
TailleMorceau1 = TailleMorceau1 + 1
ReDim Preserve Morceau1(1 To TailleMorceau1)
Morceau1(TailleMorceau1) = Prov
For I = 1 To Len(CheminRef) ' pour CheminRef
Select Case Mid(CheminRef, I, 1)
Case Is = ""
TailleMorceau2 = TailleMorceau2 + 1
ReDim Preserve Morceau2(1 To TailleMorceau2)
Morceau2(TailleMorceau2) = Prov
Prov = vbNullString
Case Else
Prov = Prov & Mid(CheminRef, I, 1)
End Select
Next I
TailleMorceau2 = TailleMorceau2 + 1
ReDim Preserve Morceau2(1 To TailleMorceau2)
Morceau2(TailleMorceau2) = Prov
Prov = vbNullString
For I = 1 To TailleMorceau2 - 1
Prov = Prov & ".."
Next I
For I = 2 To TailleMorceau1
Prov = Prov & Morceau1(I) & ""
Next I
CheminRelatif = Left(Prov, Len(Prov) - 1) 'retire le "" final
End Function

pour le contraire, cela se fait "tout seul"
cordialement
Avatar
Marc
Desole mais le code n'est pas des plus clairs...
Enfin surtout les noms de variables

"marcel Bultez" wrote in message
news:

transforme chemin absolu en chemin relatif

Public Function CheminRelatif _
(ByVal Chact As String, ByVal Chref As String) As String
'YYYYYYYYYYYYYYYYYYYY
'Y Renvoie l'adresse de Chact (dossier) par rapport à ChRef
'Y Exemple : Chact="c:program files" , ChRef="c:windows"
'Y ==> CHEMINRELATIF = "..program files"
'YYYYYYYYYYYYYYYYYYYY
Dim Morceau1() As String, Morceau2(), Prov As String
Dim Chemin1, CheminRef As String
Dim TailleMorceau1 As Integer, TailleMorceau2, I, j As Integer
ReDim Morceau1(1 To 1), Morceau2(1 To 1)
Chemin1 = Chact
If Right(Chemin1, 1) = "" Then
Chemin1 = Left(Chemin1, Len(Chemin1) - 1)
End If
CheminRef = Chref
If Right(CheminRef, 1) = "" Then
CheminRef = Left(CheminRef, Len(CheminRef) - 1)
End If
For I = 1 To Len(Chemin1) '* pour chemin1
'YYYY Marque chaque élément du chemin dans un tableau
Select Case Mid(Chemin1, I, 1)
Case Is = ""
TailleMorceau1 = TailleMorceau1 + 1
ReDim Preserve Morceau1(1 To TailleMorceau1)
Morceau1(TailleMorceau1) = Prov
Prov = vbNullString
Case Else
Prov = Prov & Mid(Chemin1, I, 1)
End Select
Next I
'ajoute le dernier élément (non précédé d'un slash)
TailleMorceau1 = TailleMorceau1 + 1
ReDim Preserve Morceau1(1 To TailleMorceau1)
Morceau1(TailleMorceau1) = Prov
For I = 1 To Len(CheminRef) ' pour CheminRef
Select Case Mid(CheminRef, I, 1)
Case Is = ""
TailleMorceau2 = TailleMorceau2 + 1
ReDim Preserve Morceau2(1 To TailleMorceau2)
Morceau2(TailleMorceau2) = Prov
Prov = vbNullString
Case Else
Prov = Prov & Mid(CheminRef, I, 1)
End Select
Next I
TailleMorceau2 = TailleMorceau2 + 1
ReDim Preserve Morceau2(1 To TailleMorceau2)
Morceau2(TailleMorceau2) = Prov
Prov = vbNullString
For I = 1 To TailleMorceau2 - 1
Prov = Prov & ".."
Next I
For I = 2 To TailleMorceau1
Prov = Prov & Morceau1(I) & ""
Next I
CheminRelatif = Left(Prov, Len(Prov) - 1) 'retire le "" final
End Function

pour le contraire, cela se fait "tout seul"
cordialement





Avatar
marcel Bultez
ce n'est pas très clair ?
le reproche est comique !
Avatar
Marc
J'avais pas compris un truc desole...

Ce n'etait pas un reproche agressif ... mais la prochaine fois je ferais
attention ;-)
Encore merci


"marcel Bultez" wrote in message
news:
ce n'est pas très clair ?
le reproche est comique !





Avatar
François Picalausa
Bonjour/soir,

On peut aussi le faire par API (mais limité à MAX_PATH):

'Trois textbox text1, text2, text3
'Un commandbutton command1
'Deux checkbox check1, check2

Option Explicit

Private Declare Function PathRelativePathTo _
Lib "shlwapi.dll" _
Alias "PathRelativePathToA" _
( _
ByVal pszPath As String, _
ByVal pszFrom As String, _
ByVal dwAttrFrom As Long, _
ByVal pszTo As String, _
ByVal dwAttrTo As Long _
) _
As Long

Private Declare Function PathGetDriveNumber _
Lib "shlwapi.dll" _
Alias "PathGetDriveNumberA" _
( _
ByVal lpsz As String _
) _
As Long

Private Const MAX_PATH = 260
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Private Const FILE_ATTRIBUTE_NORMAL = &H80

Private Sub Command1_Click()
'Les deux chemins doivent avoir une racine commune
If PathGetDriveNumber(Text1.Text) = PathGetDriveNumber(Text2.Text) Then
Dim strBuffer As String, AttrFirst As Long, AttrSecond As Long
If Check1.Value = vbChecked Then
AttrFirst = FILE_ATTRIBUTE_DIRECTORY
Else
AttrFirst = FILE_ATTRIBUTE_NORMAL
End If

If Check2.Value = vbChecked Then
AttrSecond = FILE_ATTRIBUTE_DIRECTORY
Else
AttrSecond = FILE_ATTRIBUTE_NORMAL
End If

strBuffer = String$(MAX_PATH, Chr$(0))

'Si la fonction réussi
If PathRelativePathTo(strBuffer, Text1.Text & vbNullChar, AttrFirst,
Text2.Text & vbNullChar, AttrSecond) Then
Text3.Text = Left$(strBuffer, InStr(1, strBuffer, vbNullChar) -
1)
Else
Text3.Text = ""
End If
Else
Text3.Text = Text2.Text
End If
End Sub

Private Sub Form_Load()
Me.BorderStyle = 1
Me.Height = 2310
Me.Width = 6150
Text1.Top = 120
Check1.Top = 120
Text2.Top = 480
Check2.Top = 480
Text3.Top = 1440
Text1.Width = 4455
Text2.Width = 4455
Text3.Width = 4455
Text1.Left = 120
Text2.Left = 120
Text3.Left = 120
Text1.Height = 285
Text2.Height = 285
Text3.Height = 285
Check1.Height = 255
Check2.Height = 255
Check1.Height = 255
Check2.Height = 255
Check1.Width = 1335
Check2.Width = 1335
Check1.Left = 4680
Check2.Left = 4680
Check1.Caption = "Directory"
Check2.Caption = "Directory"
Command1.Left = 1080
Command1.Height = 495
Command1.Width = 3015
Command1.Top = 840
Command1.Caption = "To relative path"

Text1.Text = App.Path
End Sub

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"marcel Bultez" a écrit dans le message
de news:
transforme chemin absolu en chemin relatif

Public Function CheminRelatif _
(ByVal Chact As String, ByVal Chref As String) As String
'YYYYYYYYYYYYYYYYYYYY
'Y Renvoie l'adresse de Chact (dossier) par rapport à ChRef
'Y Exemple : Chact="c:program files" , ChRef="c:windows"
'Y ==> CHEMINRELATIF = "..program files"
'YYYYYYYYYYYYYYYYYYYY
Dim Morceau1() As String, Morceau2(), Prov As String
Dim Chemin1, CheminRef As String
Dim TailleMorceau1 As Integer, TailleMorceau2, I, j As Integer
ReDim Morceau1(1 To 1), Morceau2(1 To 1)
Chemin1 = Chact
If Right(Chemin1, 1) = "" Then
Chemin1 = Left(Chemin1, Len(Chemin1) - 1)
End If
CheminRef = Chref
If Right(CheminRef, 1) = "" Then
CheminRef = Left(CheminRef, Len(CheminRef) - 1)
End If
For I = 1 To Len(Chemin1) '* pour chemin1
'YYYY Marque chaque élément du chemin dans un tableau
Select Case Mid(Chemin1, I, 1)
Case Is = ""
TailleMorceau1 = TailleMorceau1 + 1
ReDim Preserve Morceau1(1 To TailleMorceau1)
Morceau1(TailleMorceau1) = Prov
Prov = vbNullString
Case Else
Prov = Prov & Mid(Chemin1, I, 1)
End Select
Next I
'ajoute le dernier élément (non précédé d'un slash)
TailleMorceau1 = TailleMorceau1 + 1
ReDim Preserve Morceau1(1 To TailleMorceau1)
Morceau1(TailleMorceau1) = Prov
For I = 1 To Len(CheminRef) ' pour CheminRef
Select Case Mid(CheminRef, I, 1)
Case Is = ""
TailleMorceau2 = TailleMorceau2 + 1
ReDim Preserve Morceau2(1 To TailleMorceau2)
Morceau2(TailleMorceau2) = Prov
Prov = vbNullString
Case Else
Prov = Prov & Mid(CheminRef, I, 1)
End Select
Next I
TailleMorceau2 = TailleMorceau2 + 1
ReDim Preserve Morceau2(1 To TailleMorceau2)
Morceau2(TailleMorceau2) = Prov
Prov = vbNullString
For I = 1 To TailleMorceau2 - 1
Prov = Prov & ".."
Next I
For I = 2 To TailleMorceau1
Prov = Prov & Morceau1(I) & ""
Next I
CheminRelatif = Left(Prov, Len(Prov) - 1) 'retire le "" final
End Function

pour le contraire, cela se fait "tout seul"
cordialement