Est t'il possible ? (Modif Name)

Résolu
Signaler
Messages postés
197
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 mai 2009
-
Messages postés
197
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 mai 2009
-
Bonjour, j'aurai aimé savoir si il est possible de supprimer tous les espaces du nom d'un répertoire, ses fichier, de ses sous-répertoires et leurs fichiers, avec un petit programme VBasic, sans détériorer les fichiers ni les déplacer.
MerZi ... Zi ... Zi ... PtitCat

3 réponses

Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
Bonjour,

Pour ce qui est de la modification du nom : ===>> instruction Name de vb !
Pour ce qui est du parcours de tous le répertoire et de "l'inventaire" des fichiers à traiter : ===>>> sujet plus que récurrent + sources présents sur ce forum
Pour ce quiu est des conséquences éventuelles du renommage : les mêmes que si tu le faisais depuis l'explorateur (en fonction des fichiers concernés et de leur utilité). Et de celà, VB n'a pas à s'en mêler (tu es le seul à savoir ce que tu fais).
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Bah oui, c'est possible.
Il te suffit d'énumérer les fichiers d'un répertoire récursivement, de faire systématiquement un Replace(FN," ","") sur le nom du fichier et de le renommer !

Option Explicit

Private Const MAX_PATH As Long = 260
Private Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10

Private Type T_SECURITY_ATTRIBUTES
 nLength As Long
 lpSecurityDescriptor As Long
 bInheritHandle As Long
End Type

Private Type T_FILETIME
 dwLowDateTime As Long
 dwHighDateTime As Long
End Type

Private Type T_WIN32_FIND_DATA
 dwFileAttributes As Long
 ftCreationTime As T_FILETIME
 ftLastAccessTime As T_FILETIME
 ftLastWriteTime As T_FILETIME
 nFileSizeHigh As Long
 nFileSizeLow As Long
 dwReserved0 As Long
 dwReserved1 As Long
 cFileName As String * MAX_PATH
 cAlternate As String * 14
End Type

Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function FindFirstFile Lib "kernel32.dll" Alias "FindFirstFileA" (ByVal lpFileName As String, ByRef lpFindFileData As T_WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32.dll" Alias "FindNextFileA" (ByVal hFindFile As Long, ByRef lpFindFileData As T_WIN32_FIND_DATA) As Long
Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (ByRef Destination As Any, ByVal Length As Long)

Public Sub ListFiles(Path As String, Filter As String, Optional Recursive As Boolean = False)
 Dim hFiles As Long
 Dim FD As T_WIN32_FIND_DATA, FN As String
 Dim FileName As String
 If Right(Path, 1) <> "\" And Right(Path, 1) <> "/" Then Path = Path & "\"
 hFiles = FindFirstFile(Path & Filter, FD)
 If hFiles = -1 Then Exit Sub
 Do
  FN = Left(FD.cFileName, InStr(1, FD.cFileName, Chr(0)) - 1)
  If FN <> "." And FN <> ".." And FN <> vbNullString Then
   If FD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY Then
     If Recursive Then
      Handler 2, Path & FN
      ListFiles Path & FN, Filter, True
     End If
     Else
      Handler 1, Path & FN
   End If
  End If
 Loop While FindNextFile(hFiles, FD) <> 0
 CloseHandle hFiles
End Sub

Private Sub Handler(Msg As Integer, Optional FileName As String = "")
 Select Case Msg
  Case 1
   'New listed file
   DoEvents
  Case 2
   'Entering in directory
   DoEvents 'Do nothing
 End Select
End Sub
, ----
[../code.aspx?ID=41455 Syntax color by Renfield]

Tu n'as plus qu'à modifier la sub Handler dans le 1er cas : faire un InStr et renommer.
Messages postés
197
Date d'inscription
mercredi 30 mai 2007
Statut
Membre
Dernière intervention
13 mai 2009

Merci beaucoup pour ton aide.

jmf0 => je sais que j'ai toutes les informations qu'il me faut pour trouver une solution sont trouvable sur le site, mais je voulais juste vérifier qu'il était aussi possible de modifier les nom d'un répertoire et ses sous-répertoir, c'est pour ça que je n'ai pas demandé de solution code.

Cordialement PtitCat