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 ;-)
26 mars 2007 à 14:57
********************************************
.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
12 févr. 2007 à 15:59
10 févr. 2007 à 13:19
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...
9 févr. 2007 à 10:52
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
19 janv. 2007 à 08:08
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.