FAITES GAFFE À DIR()

Messages postés
780
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
16 avril 2009
- - Dernière réponse : cs_rt15
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
- 21 mars 2007 à 09:14
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32807-faites-gaffe-a-dir

cs_rt15
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10 -
Un an après, mon source fait enfin un heureux. :)

Cool d'autant qu'il est plein d'erreur de syntaxe...
* honte *
Hop mis à jour. Mais pourquoi le compilo les prends sans broncher ??? Genre j'avais du MkDir("bidule").

Bon sinon, comme le dit BruNews, les APIs marchent très bien... Quand on s'en sert correctement.
Par exemple, si on oublie le FindClose, le dossier ne se supprime pas :

Private Sub Command1_Click()
Dim nFile As Long
Dim hSearch As Long
Dim uFindData As WIN32_FIND_DATA

' Création d'un répertoire et de deux fichiers
MkDir "c:\test"
nFile = FreeFile
Open "c:\test\Empty1.txt" For Output As #nFile
Close #nFile
nFile = FreeFile
Open "c:\test\Empty2.txt" For Output As #nFile
Close #nFile

' Récupération d'un handle de recherche
hSearch = FindFirstFile("c:\test\*.txt", uFindData)
If hSearch = INVALID_HANDLE_VALUE Then
Debug.Print "Echec du FindFirst."
Exit Sub
End If

' Listage du contenu du répertoire
Do
Debug.Print uFindData.cFileName
Loop Until FindNextFile(hSearch, uFindData) = 0
If GetLastError <> ERROR_NO_MORE_FILES Then
Debug.Print "Erreur lors du listage des fichiers."
End If

' Suppression des fichiers
Kill "c:\test\Empty1.txt"
Kill "c:\test\Empty2.txt"

' Tentative de suppression qui aboutit à un échec
If RemoveDirectory("c:\test") = 0 Then Debug.Print "Tu as oublié de fermer la recherche jeune padawan..."

' Fermeture propre de la recherche
If FindClose(hSearch) = 0 Then Debug.Print "Erreur lors de la fermeture de la recherche"

' Cette fois la suppression fonctionne
If RemoveDirectory("c:\test") <> 0 Then Debug.Print "Voilà qui est mieux !"

End Sub
cs_Golard
Messages postés
7
Date d'inscription
mardi 13 décembre 2005
Statut
Membre
Dernière intervention
23 septembre 2010
-
Merci beaucoup pour ton coup de main rt15 !

C'est clair, concis et en plus tu apportes la SOLUTION!!!

A lire tous les commentaires de ton post, je pense que les intervenants n'avaient pas vraiment eu le même problème que toi.

Moi si, et je confirme que tu apportes réellement l'analyse complète de ce pb réel.
spidermario
Messages postés
130
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
14 mars 2009
-
Bah, en même temps, j'ai tout à l'heure essayé de supprimé un .exe qui ne contenait plus grand chose.
Quand je passais par clic droit -> Supprimer ou par la touche Suppr, ça na marchait pas, mais ça a marché avec l'invite de commande DOS, alors que Explorer.exe était toujours lancé.

Ma conclusion : Windows est vraiment bizarre...
cs_rt15
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
10 -
Salut,

Bin ça dépend de ce que tu appel le DOS. Avec le vrai DOS (On peut parfois encore y accéder en bootant sur une disquette), tu as effectivment peu de chance qu'un fichier soit utiliser par une application alors que tu essaie de le supprimer, vut que c'est du monotache (Encore qu'un paquet d'efforts on été fait pour le rendre plus ou moins multi.).

Mais avec l'invite de commande de Windows, tu te retrouve en multi. Ici, ça ne règle le problème que car c'est un des processus de windows qui "merde".
spidermario
Messages postés
130
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
14 mars 2009
-
Dites-moi si je dis une bêtise.