users_user-20.html -  [VB] Créer une arborescence compléte de répertoires
Une petite procédure qui permet de créer tous les dossiers innexistants d'un chemin.

  1. Public Sub CreateAllDir(ByVal sPath As String
  2. Dim oFS As FileSystemObject 
  3. Dim sStr As String 
  4. Dim oCol As Collection 
  5. Dim i As Integer 
  6.     Set oFS = New FileSystemObject 
  7.     Set oCol = New Collection 
  8.      
  9.     sStr = sPath 
  10.      
  11.     While sStr <> "" 
  12.         oCol.Add sStr 
  13.         sStr = oFS.GetParentFolderName(sStr) 
  14.     Wend 
  15.      
  16.     For i = oCol.Count To 1 Step -1 
  17.         If Not oFS.FolderExists(oCol(i)) Then 
  18.             oFS.CreateFolder oCol(i) 
  19.         End If 
  20.     Next i 
  21.      
  22.     Set oFS = Nothing 
  23.     Set oCol = Nothing 
  24. End Sub
Commentaires
[VB] Créer une arborescence compléte de répertoires...
Un autre méthode beaucoup plus rapide (50%) qui utilise les API et non le FileSystemObject (donc pas de DLL à lier/trimballer)

  1. Private Const MAX_PATH As Long = 260 
  2. Private Const INVALID_HANDLE_VALUE As Long = -1 
  3. Private Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10 
  4. nLength As Long 
  5.     lpSecurityDescriptor As Long 
  6.     bInheritHandle As Long 
  7. End Type 
  8. Private Type SECURITY_ATTRIBUTES 
  9. Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" _ 
  10.                             (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long 
  11. Private Type FILETIME 
  12.    dwLowDateTime As Long 
  13.    dwHighDateTime As Long 
  14. End Type 
  15. Private Type WIN32_FIND_DATA 
  16.    dwFileAttributes As Long 
  17.    ftCreationTime As FILETIME 
  18.    ftLastAccessTime As FILETIME 
  19.    ftLastWriteTime As FILETIME 
  20.    nFileSizeHigh As Long 
  21.    nFileSizeLow As Long 
  22.    dwReserved0 As Long 
  23.    dwReserved1 As Long 
  24.    cFileName As String * MAX_PATH 
  25.    cAlternate As String * 14 
  26. End Type 
  27. Private Declare Function FindFirstFile Lib "kernel32" _ 
  28.    Alias "FindFirstFileA" _ 
  29.   (ByVal lpFileName As String, _ 
  30.    lpFindFileData As WIN32_FIND_DATA) As Long 
  31.     
  32. Private Declare Function FindClose Lib "kernel32" _ 
  33.   (ByVal hFindFile As Long) As Long 
  34. Public Sub rMkDir(sPath As String
  35. Dim sTmp As String 
  36. Dim iIndex As Integer 
  37. Dim iLen As Integer 
  38. Dim iEnd As Integer 
  39. Dim SecAttrib As SECURITY_ATTRIBUTES 
  40.     With SecAttrib 
  41.         .lpSecurityDescriptor = &O0 
  42.         .bInheritHandle = False 
  43.         .nLength = Len(SecAttrib) 
  44.     End With 
  45.     iLen = Len(sPath) 
  46.     sTmp = Left(sPath, 2
  47.      
  48.     If sTmp = "\\" Then 
  49.         iIndex = InStr(3, sPath, "\"
  50.     End If 
  51.          
  52.     Do 
  53.         iEnd = InStr(iIndex + 1, sPath, "\"
  54.          
  55.         If iEnd = 0 Then 
  56.             iEnd = iLen 
  57.         End If 
  58.          
  59.         sTmp = Mid(sPath, 1, iEnd) 
  60.          
  61.         If Not FolderExists(sTmp) Then 
  62.             Call CreateDirectory(sTmp, SecAttrib) 
  63.         End If 
  64.          
  65.         iIndex = iEnd + 1 
  66.     Loop While iEnd <> iLen 
  67. End Sub 
  68. Private Function FolderExists(sFolder As String) As Boolean 
  69.    Dim hFile As Long 
  70.    Dim WFD As WIN32_FIND_DATA 
  71.     
  72.    sFolder = UnQualifyPath(sFolder) 
  73.    hFile = FindFirstFile(sFolder, WFD) 
  74.     
  75.    FolderExists = (hFile <> INVALID_HANDLE_VALUE) And _ 
  76.                   (WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) 
  77.     
  78.    Call FindClose(hFile) 
  79. End Function 
  80. Private Function UnQualifyPath(ByVal sFolder As String) As String 
  81.    sFolder = Trim$(sFolder) 
  82.     
  83.    If Right$(sFolder, 1) = "\" Then 
  84.       UnQualifyPath = Left$(sFolder, Len(sFolder) - 1
  85.    Else 
  86.       UnQualifyPath = sFolder 
  87.    End If 
  88. End Function
Par Poire, Publié le 10/11/2004 @ 11:04:57
Poster un commentaire
Utilisateur
Mot de passe
 
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?