Un file/folder exists très utile, complet et sans autes choses que les dlls vb

Contenu du snippet

Salut,
Il arrive souvent que l'on doivent vérifier si un fichier existe. Pour cela, il y a de nombreuses solutions:

L'api FileExist de Kernel32.dll (Qui finit par déboucher sur un FindFirstFile) qui n'est pas si vite.

FSO avec son file/folder exist (lourd pour rien)

FileLen ne fonctionne pas avec les dossier et c'est possible qu'un fichier so vide

Vb avec son GetAttr. La meilleure solution. Le problème, comment faire différencier un dossier d'un fichier ou comment faire accepter un dossier caché ou archivé? Voilà un endroit où ont peut rester bloqué. Il y a une solution très simple à ce problème. Je vais vous expliquer ma façon d'utiliser cette fonction.

Il faut savoir que lorsque GetAttr vous retourne une valeur, cette valeur contient une addition de toute les propriétés de ce dossier ou fichier (si c'est un fichier ou un dossier, s'il est en lecture seule, caché, système, archivé...). Il faut donc vérifié que la/les valeur(s) que l'on exigent sont là. Pour cela, il faut utiliser AND. Regardez l'exemple qui suit :

Source / Exemple :


'Début de mon code que vous pouvez utiliser

Public Function ThingExist(Path As String, ThingType As VbFileAttribute) As Boolean
On Error Resume Next
ThingExist = ((GetAttr(Path) And ThingType) = ThingType)
Err.Clear
End Function

'\\

'Exemple d'utilisation

Private Sub Form_Load()
MsgBox ThingExist("c:\rien.ini", vbNormal)
End Sub

'Voici les paramètes possibles à vérifier :
'vbAlias	                ???
'vbArchive	                "fichier/dossier archivé (date)"
'vbDirectory	"dossier ordinaire"
'vbHidden	                "fichier/dossier caché"
'vbNormal   	"fichier ordinaire"
'vbReadOnly	"fichier/dossier en lecture seule"
'vbSystem	"fichier/dossier système"
'vbVolume	???

'Vous pouvez exiger plusieurs paramètres en même temps comme (qui doivent tous être vrai):

Private Sub Form_Load()
MsgBox ThingExist("c:\rien.ini", vbNormal or vbArchive or vbReadOnly)
End Sub

Conclusion :


Une solution très simple à un problème vieux comme le monde ;-)

A voir également

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.