Vider un répertoire, ses sous-répertoires et les fichiers contenus dedans avec api!

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 087 fois - Téléchargée 33 fois

Contenu du snippet

Cette source permet de supprimer les fichiers et répertoires avec les apis. On peut ainsi vérifier qu'il n'y a pas eu d'erreurs. En plus il vaut mieux utiliser les apis que filesystemobject (détecté par certaine antivirus). J'attend vos commentaires sur la qualité du code et j'espère que vous trouverez des améliorations :).

Source / Exemple :


Public Function DelDir(sPath As String, Optional SubDirectory As Boolean = False) As Long
On Error Resume Next

    Dim FileArray As WIN32_FIND_DATA
    Dim hFindFile As Long
    Dim sFileOrDir As String
    Dim sDirectory As String
    Dim isDir As Long
    Dim nSubDir As Long
    Dim SubDir() As String
    Dim sRet As Long

    If SubDirectory = False Then DelDir = 1

    hFindFile = FindFirstFile(sPath & "*.*", FileArray)
    If hFindFile <> INVALID_HANDLE_VALUE Then
        Do
            sFileOrDir = Left$(FileArray.cFileName, InStr(FileArray.cFileName, vbNullChar) - 1)
            DoEvents
            
            If Left$(sFileOrDir, 1) <> "." Then
                isDir = (FileArray.dwFileAttributes And &H10)
                
                If isDir = False Then
                    SetAttr sPath & "\" & sFileOrDir, vbNormal
                    DoEvents
                    sRet = DeleteFile(sPath & "\" & sFileOrDir)
                    If sRet = 0 Then DelDir = 0
                Else
                    nSubDir = nSubDir + 1
                    ReDim Preserve SubDir(1 To nSubDir)
                    
                    sDirectory = sPath & "\" & Mid$(FileArray.cFileName, 1, InStr(1, FileArray.cFileName, vbNullChar) - 1) & "\"
                    SubDir(nSubDir) = sDirectory
                    DelDir = DelDir(sDirectory, True)
                End If
            End If

        Loop Until FindNextFile(hFindFile, FileArray) = 0
        
        If nSubDir <> 0 Then
            For i = 1 To nSubDir
                SetAttr SubDir(i), vbNormal
                DoEvents
                RmDir SubDir(i)
                If Err.Number <> 0 Then DelDir = 0
            Next i
        End If
        
        FindClose hFindFile
        Erase SubDir
        
        If SubDirectory = False Then
            SetAttr sPath, vbNormal
            DoEvents

            RmDir sPath
            If Err.Number <> 0 Then DelDir = 0
        End If
    End If
End Function

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
dimanche 10 août 2003
Statut
Membre
Dernière intervention
28 juillet 2005

Bonjour, je voudrais utiliser cette source de facon à en faire un module de gestion de fichier que je pourrai par la suite greffer à une base de donnée access (les patrons étant ce qu'ils sont on fait avec ce qu'on a) le probleme c'est que cette source quoi que parfaitement gérer par mon VB ne semble pas vouloir fonctionner sous access probablement à cause d'une référence manquante. La reconnaissance ne se fait pas au niveau de la référence "WIN32_FIND_DATA". est-ce que tu saurais quel module je dois ajouter en référence dans access pour pouvoir valider cette instruction ?
Messages postés
185
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
10 janvier 2008

Je pense que cela sera pareil... Parce que si ton av le detecte, c'est parce qu'il détecte l'utilisation de l'api! Et en cpp t'utilise la même. Par contre il serait interessant de savoir comment l'av detecte controle l'utilisation des apis.
Messages postés
419
Date d'inscription
lundi 30 août 2004
Statut
Membre
Dernière intervention
28 janvier 2008

bah mici quand meme :-) je pense refaire ta source en cpp p-e que comme ca se sera pas detecter ;-)
Messages postés
185
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
10 janvier 2008

arfff et bien je ne sais pa quoi faire dsl =D
Messages postés
419
Date d'inscription
lundi 30 août 2004
Statut
Membre
Dernière intervention
28 janvier 2008

oui oui il le detecte helas ;)
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.