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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 577 fois - Téléchargée 34 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

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
J'irais voir cela. Merci Renfield.
Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
60
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
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
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
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.