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

creation d'un chemin en une fois

6 réponses
Avatar
free.fr
Bonjour ,

je voudrais faire l'equivalent de ce :

md c:\a\b\c

dans une boite DOS avec commandes etendues ca marche.

Comment le faire en VB ?

j'ai essayé avec un shell , sans succes.

merci de vos tuyaux.

6 réponses

Avatar
Jean-marc
free.fr wrote:
Bonjour ,

je voudrais faire l'equivalent de ce :
md c:abc
dans une boite DOS avec commandes etendues ca marche.
Comment le faire en VB ?



Hello,

En VB la fonction permettant de créer un répertoire est MkDir.
Voir la doc ici:
http://msdn.microsoft.com/en-us/library/aa266169(VS.60).aspx

Pour créer plusieurs répertoires en une fois, tu peux faire ceci:

' path must be like c:tototititutu
'
Private Function CreateDir(ByVal path As String) As Boolean
Dim t() As String
Dim i As Long

t = Split(path, "")
For i = 0 To UBound(t())
If i = 0 Then
ChDir t(0) & ""
Else
MkDir t(i)
ChDir t(i)
End If
Next i
CreateDir = True

CreateDir_END:
Exit Function

CreateDir_ERR:
CreateDir = False
Resume CreateDir_END
End Function


Et tu appelles comme cela:
Private Sub Command1_Click()
Dim ret As Boolean

ret = CreateDir("c:tototititutu")
If ret Then
MsgBox "répertoire créé avec succès"
Else
MsgBox "erreur"
End If
End Sub


Attention toutefois : je ne donne ici qu'un code destiné à servir
d'exemple. Tel quel, il fonctionne parfaitement, mais il
faut bien sur compléter cette fonction pour gérer les cas d'erreurs
et ils sont nombreux. Mais bon, c'est la base :-)

Cordialement;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
Jean
"Jean-marc" wrote in message
news:498a0b96$0$2853$

Attention toutefois : je ne donne ici qu'un code destiné à servir
d'exemple.



C'est surtout n'importe quoi.
Ca se fait avec l'api Shell en ... ligne de code !
Ah, ces stagaires qui ne savent pas utiliser Google...
Avatar
parci
On 5 fév, 07:49, "Jean" wrote:
"Jean-marc" wrote in message

news:498a0b96$0$2853$

> Attention toutefois : je ne donne ici qu'un code destiné à servir
> d'exemple.

C'est surtout n'importe quoi.
Ca se fait avec l'api Shell en ...  ligne de code !



Misère.

Alors que de tout façon rien ne vaut le FileSystemObject.
Avatar
François Picalausa
On Feb 5, 6:49 am, "Jean" wrote:
"Jean-marc" wrote in message

news:498a0b96$0$2853$

> Attention toutefois : je ne donne ici qu'un code destiné à servir
> d'exemple.

C'est surtout n'importe quoi.
Ca se fait avec l'api Shell en ...  ligne de code !
Ah, ces stagaires qui ne savent pas utiliser Google...



Hello,

<pour what="oil" target="fire">
De mon temps, les stagiaires qui se prétendaient si tellement
supérieurs à l'utilisation de google fournissaient des exemples qu'ils
avaient eux-même retravaillé, de sorte à partager leur savoir. En ce
qui concerne les professionnels respectables et plus savants, ils
n'avaient pas comme catch-phrase GFGI (hint: pour avoir la définition,
go freaking google it!): ils n'avaient pas besoin de prétendre que le
monde autour d'eux n'était composé que de stagiaires incompétents pou r
se sentir supérieurs!

Mais... ce n'est probablement plus la norme!
</pour>

L'API en question est probablement SHPathPrepareForWrite dont voici un
exemple de wrapper:
Private Declare Function SHPathPrepareForWrite _
Lib "shell32.dll" _
Alias "SHPathPrepareForWriteA" _
( _
ByVal hwnd As Long, _
ByVal punkEnableModless As Long, _
ByVal pszPath As String, _
ByVal dwFlags As Long _
) _
As Long

Private Const SHPPFW_DIRCREATE = &H1
Private Const SHPPFW_DEFAULT = SHPPFW_DIRCREATE
Private Const SHPPFW_ASKDIRCREATE = &H2
Private Const SHPPFW_IGNOREFILENAME = &H4

Public Function PreparePath(strPath As String, ParentWindow As Long,
ShowUI As Boolean) As Long
If ParentWindow And ShowUI Then
PreparePath = SHPathPrepareForWrite ParentWindow, _
0, strPath, _
SHPPFW_ASKDIRCREATE Or SHPPFW_IGNOREFILENAME
Else
PreparePath = SHPathPrepareForWrite 0, _
0, strPath, _
SHPPFW_DEFAULT Or SHPPFW_IGNOREFILENAME
End If
End Function

Elle a a peu près les mêmes limitations que la méthode proposée par
Jean-Marc aux exceptions suivantes:
- Le support d'erreur est différent: la valeur de retour est
probablement significative, mais *non documentée*
cd. http://msdn.microsoft.com/en-gb/library/bb762237(VS.85).aspx
- SHPathPrepareForWrite ne fonctionne que pour Windows 2000 et
suivants (la méthode proposée par Jean-Marc fonctionne sur tout OS sur
lequel VB/VBA est supporté)

Je vous laisse deviner quelle méthode (implémentée par les stagiaires
de chez microsoft ?) le package & deployment wizard utilise. (cf.
MakePathAux dans COMMON.BAS)

François
Avatar
Driss HANIB
Aller, je vais faire mon pro !!!


Mais je k'ai trouvé sur le net*

le mieux c'est d'utiliser l'API :

Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal
lpPath As String) As Long

Elle crée le chemin en une fois !

je l'ai utilisée dans une petite procédure

Sub RépertoireCréation(Chemin As String)
'Dim Chem() As String
'Dim Nouv As String
Dim rep As Long
If Right$(Chemin, 1) <> "" Then
Chemin = Chemin & ""
End If
rep = MakeSureDirectoryPathExists(Chemin)

End Sub


cela fonctionne bien sur W98 et XP, sur des lecteurs Réseaux etc..


Driss


"François Picalausa" a écrit dans le message de news:

On Feb 5, 6:49 am, "Jean" wrote:
"Jean-marc" wrote in message

news:498a0b96$0$2853$

> Attention toutefois : je ne donne ici qu'un code destiné à servir
> d'exemple.

C'est surtout n'importe quoi.
Ca se fait avec l'api Shell en ... ligne de code !
Ah, ces stagaires qui ne savent pas utiliser Google...



Hello,

<pour what="oil" target="fire">
De mon temps, les stagiaires qui se prétendaient si tellement
supérieurs à l'utilisation de google fournissaient des exemples qu'ils
avaient eux-même retravaillé, de sorte à partager leur savoir. En ce
qui concerne les professionnels respectables et plus savants, ils
n'avaient pas comme catch-phrase GFGI (hint: pour avoir la définition,
go freaking google it!): ils n'avaient pas besoin de prétendre que le
monde autour d'eux n'était composé que de stagiaires incompétents pour
se sentir supérieurs!

Mais... ce n'est probablement plus la norme!
</pour>

L'API en question est probablement SHPathPrepareForWrite dont voici un
exemple de wrapper:
Private Declare Function SHPathPrepareForWrite _
Lib "shell32.dll" _
Alias "SHPathPrepareForWriteA" _
( _
ByVal hwnd As Long, _
ByVal punkEnableModless As Long, _
ByVal pszPath As String, _
ByVal dwFlags As Long _
) _
As Long

Private Const SHPPFW_DIRCREATE = &H1
Private Const SHPPFW_DEFAULT = SHPPFW_DIRCREATE
Private Const SHPPFW_ASKDIRCREATE = &H2
Private Const SHPPFW_IGNOREFILENAME = &H4

Public Function PreparePath(strPath As String, ParentWindow As Long,
ShowUI As Boolean) As Long
If ParentWindow And ShowUI Then
PreparePath = SHPathPrepareForWrite ParentWindow, _
0, strPath, _
SHPPFW_ASKDIRCREATE Or SHPPFW_IGNOREFILENAME
Else
PreparePath = SHPathPrepareForWrite 0, _
0, strPath, _
SHPPFW_DEFAULT Or SHPPFW_IGNOREFILENAME
End If
End Function

Elle a a peu près les mêmes limitations que la méthode proposée par
Jean-Marc aux exceptions suivantes:
- Le support d'erreur est différent: la valeur de retour est
probablement significative, mais *non documentée*
cd. http://msdn.microsoft.com/en-gb/library/bb762237(VS.85).aspx
- SHPathPrepareForWrite ne fonctionne que pour Windows 2000 et
suivants (la méthode proposée par Jean-Marc fonctionne sur tout OS sur
lequel VB/VBA est supporté)

Je vous laisse deviner quelle méthode (implémentée par les stagiaires
de chez microsoft ?) le package & deployment wizard utilise. (cf.
MakePathAux dans COMMON.BAS)

François
Avatar
free.fr
Merci Driss

c'est ce que je voulais

pour celui qui parlait du shell , comment fait-il ?