Les Snippets

Connexion

Déplacer un dossier ainsi que tout son contenu vers un dossier existant ou non

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 11/06/2008 13:37:12 et initié par PCPT [Liste]
Date de mise à jour : 14/06/2008 17:45:54
Vue : 2836
Catégorie(s) : API, Fichier / Disque
Langages dispo pour ce code :
- VB6, VBA



Langage : VB6 , VBA
Date ajout : 11/06/2008
Posté par PCPT [Liste]
DateMAJ : 14/06/2008
Private Const NOERROR As Long 0&
Private Const FO_MOVE As Long &H1
Private Const FOF_ALLOWUNDO As Long &H40
Private Const FOF_CONFIRMMOUSE As Long &H2
Private Const FOF_FILESONLY As Long &H80 '  on *.*, do only files
Private Const FOF_MULTIDESTFILES As Long = &H1
Private Const FOF_NOCONFIRMATION As Long = &H10 '  Don't prompt the user.
Private Const FOF_NOCONFIRMMKDIR As Long = &H200 ' don't confirm making any needed dirs
Private Const FOF_RENAMEONCOLLISION As Long  = &H8
Private Const FOF_SILENT As Long &H4    ' don't create  progress/report
Private Const FOF_SIMPLEPROGRESS As Long = &H100 ' means don't show names of files
Private Const FOF_WANTMAPPINGHANDLE As Long  = &H20 ' Fill in SHFILEOPSTRUCT.hNameMappings
Private Type SHFILEOPSTRUCT
    hWnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAborted As Boolean
    hNameMaps As Long
    sProgress As String
End Type
Private Declare Function SHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As AnyAs Long
Public Function MoveContentDirectory(ByVal sDirSrc As String, ByVal sDirDest As String, Optional ByVal lHandle As Long = 0,  Optional ByVal bMoveContainerFolder As Boolean  = True, Optional ByVal bIncludeSubFolders As Boolean  = True, Optional ByVal bShowWindowsProgressBox As Boolean  = False, Optional ByVal bRenameIfExists As Boolean = False,  Optional ByVal bShowWindowsAskActionBox As Boolean  = True) As Boolean
'sDirSrc                    -> répertoire  source
'sDirDest                   ->  répertoire destination
'lHandle                    -> handle appelant (peut rester à  0)
'bMoveContainerFolder       -> déplacer le  contenu ou également le dossier. ne peux être TRUE si on ne déplace pas aussi  les sous-dossiers
'bIncludeSubFolders          -> déplacement récursif, donc avec les sous-dossiers et leur  contenu
'bShowWindowsProgressBox    -> affiche  la progressbox windows
'bRenameIfExists            -> pas d'écrasement, renomme  directement les nouveaux fichiers du dossier
'bShowWindowsAskActionBox   -> boite de dialogue "renommer  écraser oui tous etc...". NB : si FALSE, il n'y a pas non plus de  ProgressBox
    On Error GoTo Err_Handler
    Dim tFOS As SHFILEOPSTRUCT
'   on ne peut  pas supprimer le dossier parent si on ne déplace pas TOUT le  contenu
    If (bMoveContainerFolder = TrueAnd (bIncludeSubFolders = False) Then  Exit Function
    
'   formate les  chemins
    If bIncludeSubFolders And bMoveContainerFolder Then
        If RightB$(sDirSrc, 2) = "\" Then sDirSrc = LeftB$(sDirSrc, LenB(sDirSrc) - 2)
    Else
        If Not (RightB$(sDirSrc, 2) = "\"Then sDirSrc = sDirSrc & "\"
        sDirSrc = sDirSrc & "*.*"
    End If
    If Not (RightB$(sDirDest, 2) = "\"Then sDirDest = sDirDest & "\"
'    structure
    With tFOS
        .hWnd = lHandle
        .wFunc = FO_MOVE
        .pFrom = sDirSrc & vbNullChar
        .pTo = sDirDest & vbNullChar
        .fFlags = CInt(SetFOSFlag(bIncludeSubFolders, bShowWindowsProgressBox,  bRenameIfExists, bShowWindowsAskActionBox, False, True))
        .fAborted = False
        .hNameMaps = 0&
        .sProgress = vbNullChar
    End With
'   API /  retour
    MoveContentDirectory = (SHFileOperation(tFOS) =  NOERROR)
    
Err_Handler:
'   en IDE on peut avoir un message "Mémoire insuffisante" en fin  d'action malgré la réussite
    If Err.Number = Then MoveContentDirectory =  True
End Function

Private Function SetFOSFlag(Optional ByVal bIncludeSubFolders As Boolean  = True, Optional ByVal bShowWindowsProgressBox As Boolean  = False, Optional ByVal bRenameIfExists As Boolean = False,  Optional ByVal bShowWindowsAskActionBox As Boolean  = False, Optional ByVal bAllowUndo As Boolean = False,  Optional ByVal bMulti  As Boolean = True) As  Long
    SetFOSFlag = FOF_WANTMAPPINGHANDLE Or  FOF_NOCONFIRMMKDIR
    If Not bIncludeSubFolders Then SetFOSFlag = SetFOSFlag  Or FOF_FILESONLY
    If Not bShowWindowsProgressBox Then SetFOSFlag = SetFOSFlag  Or FOF_SILENT
    If bRenameIfExists Then SetFOSFlag = SetFOSFlag Or FOF_RENAMEONCOLLISION
    If Not bShowWindowsAskActionBox Then SetFOSFlag = SetFOSFlag  Or FOF_NOCONFIRMATION
    If bAllowUndo Then SetFOSFlag = SetFOSFlag  Or FOF_ALLOWUNDO
    If bMulti Then SetFOSFlag = SetFOSFlag Or FOF_MULTIDESTFILES
End Function

Remarque :
bReussite = MoveContentDirectory("C:\test", "D:\test", lHandle:=0, bMoveContainerFolder:=False, bIncludeSubFolders:=False, bShowWindowsProgressBox:=True, bRenameIfExists:=False, bShowWindowsAskActionBox:=False)

Snippets en rapport avec : Fichier, Dossier, Contenu, Déplacer



Codes sources en rapport avec : Fichier, Dossier, Contenu, Déplacer

{Visual Basic, VB6, VB.NET, VB 2005} FILE FOLDER LOCKER - BLOQUER (ET DÉBLOQUER) L'ACCÈS À CERTAINS FICHIERS ET DOSSIERS [DLL]
Cette DLL est une collection de fichier et dossier sur laquelle vous pourrez appliquer un verrou ...

{Visual Basic, VB6, VB.NET, VB 2005} [VB 2008] COMPARER DEUX RÉPERTOIRES
Bonjour à tous, Cette source permet de comparer deux dossiers et indique les fichiers qui sont pré...

{C / C++ / C++.NET} LISTER LES FICHIERS D'UN REPERTOIRE + FILTRES
Programmé sous Linux. Compatible windows. Liste les fichiers d'un répertoire come indiqué dans le...

{C / C++ / C++.NET} PROTEGER UN DOSSIER ET LES FICHIER A L INTERIEUR
protégé un dossier et les fichier intérieur en renommant le dossier sous le nom de, au hasard ...

{Visual Basic, VB6, VB.NET, VB 2005} GETNAMES : RÉCUPÈRE ET ÉCRIT TOUS LES NOMS DE FICHIERS D'UN DOSSIER
J'ai fait ce petit programme tout simple, qui aurait pu être créé par n'importe quel débutant, car j...

{PHP} LISTER LES DOSSIERS, SOUS-DOSSIERS ET NOMBRE DE FICHIERS
Une petite source sans prétention qui pourrait très bien figurer dans les snippets mais étant une pa...

{Visual Basic, VB6, VB.NET, VB 2005} SYNCHRONISE FICHIERS CLÉ AVEC LE PC
Voilà, comme je travaille sur une clé usb au boulot et sur mon pc chez moi je ne savais jamais les f...

{PHP} RENVOI UN DOSSIER DE NOM UNIQUE ET ALÉATOIRE
Petite fonction permettant de renvoyer un dossier disponible de nom aléatoire dans le chemin précisé...

{Foxpro} RENOMMER LE PRÉFIXE DE TOUS LES FICHIERS D'UN DOSSIER
Vous disposez d'un dossier où les noms de plusieurs fichiers commencent par la même chaine. Vous vo...

{Visual Basic, VB6, VB.NET, VB 2005} EXPLORATEUR DE DOSSIER EN VB6
Ce code sert à naviguer dans les dossiers d'un disque en se servant d'un TreeView J'affiche les sou...