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

4/5 (15 avis)

Snippet vu 13 923 fois - Téléchargée 35 fois

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

Ajouter un commentaire Commentaires
szwr Messages postés 6 Date d'inscription jeudi 11 avril 2002 Statut Membre Dernière intervention 21 décembre 2006
26 mars 2007 à 14:57
Résultat d'une petite recherche :
********************************************
.NET :

Declarations:
Imports System.IO

Code:
Public Function FileExists(ByVal FileFullPath As String) As Boolean

Dim f As New IO.FileInfo(FileFullPath)
Return f.Exists

End Function

Public Function FolderExists(ByVal FolderPath As String) As Boolean

Dim f As New IO.DirectoryInfo(FolderPath)
Return f.Exists

End Function

ASP3 vbscript :
Function FileExist(filename)
Dim fs, exist

Set fs = Server.CreateObject("Scripting.FileSystemObject")
exist = fs.FileExists(filename)
Set fs = Nothing
Return exist
End Function

'Utilisation :
If FileExist("c:\test.txt") Then
'...
End If
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
12 févr. 2007 à 15:59
J'irais voir cela. Merci Renfield.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 75
10 févr. 2007 à 13:19
La doc de GetFileAttributes est ici :

http://msdn2.microsoft.com/en-us/library/aa364944.aspx

on peut y lire :
If the function fails, the return value is INVALID_FILE_ATTRIBUTES. To get extended error information, call GetLastError.

en VB, pas besoin de GetLastError : Err.LastDllError est là pour cela...
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
9 févr. 2007 à 10:52
Auriez-vous une idée s'il est possible de détecter la présence ou non d'un fichier en fonction des droits sur ce fichier ?

Je m'explique : si je fais un DIR("Monfichier.txt") et que mon fichier n'existe pas, Windows me dit "File not found". Si le fichier existe bel et bien mais que je n'ai pas de droits en lecture (ACL de Windows), Windows dit aussi "File not found".

J'aimerais pouvoir faire la différence à savoir guider mon utilisateur en affichant "Désolé, nom de fichier mal orthographié" et "Désolé, vous n'avez pas les droits suffisants pour ouvrir le fichier".

Merci.

Christophe
cs_andrebernard Messages postés 404 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
19 janv. 2007 à 08:08
Merci Renfield

Toujours aussi compétent et rapide

Bonne journée

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.