UN FILE/FOLDER EXISTS TRÈS UTILE, COMPLET ET SANS AUTES CHOSES QUE LES DLLS VB

Signaler
Messages postés
15
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
14 mars 2006
-
Messages postés
6
Date d'inscription
jeudi 11 avril 2002
Statut
Membre
Dernière intervention
21 décembre 2006
-
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/26789-un-file-folder-exists-tres-utile-complet-et-sans-autes-choses-que-les-dlls-vb

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
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.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
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...
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
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Private Declare Function GetFileAttributes Lib "kernel32.dll"
Private Const INVALID_FILE_ATTRIBUTES As Long = &HFFFFFFFF

Public Function DoesExist(ByRef vsPath As String) As Boolean
DoesExist = (GetFileAttributes(vsPath) <> INVALID_FILE_ATTRIBUTES)
End Function

If DoesExist ( "C:\Output.txt") Then
'# Present
Else
'# Absent
End If
Messages postés
406
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
4 septembre 2013
1
Bonjour à tous

Super ce code de BruNews corrigé par renField
GetFileAttributes(szfile) And &H80000000& Then ABSENT

Et pour savoir si il est présent on peut évidement taper :

If GetFileAttributes("c:\config.sy") And &H80000000 Then
MsgBox "ABSENT"
Else
MsgBox "PRESENT"
End If

MAis si pour des raisons de lisibilité du code ou bien pratique on aimerais savoir directement si il est présent que faudrait il taper a la place des croix ?

If XXXXXXXXX Then
MsgBox "PRESENT"
Else
MsgBox "ABSENT"
End If

Merci
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Tu y es presque ;-)

If GetFileAttributes(szfile) And &H80000000& Then ABSENT
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
API GetFileAttributes() pour savoir si un fichier existe.
J'essaie de traduire en VB, vous corrigerez la syntaxe au besoin:

If GetFileAttributes(szfile) And 0x80000000 Then ABSENT
Messages postés
222
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
30 juin 2008

ebe_tic > Oui, ton truc peux fonctionner mais que va-t-il se passer si le fichier est caché (vbNormal + vbHidden) MAIS en plus en lecture seule(vbReadOnly)? Il y a de bonnes chances que ça ne marche plus :-(

Brunews > Je ne suis pas sûre du nom de l'API, peut-être shFileExist... ce que je me souvient c'est que cette API allait mal

moustachu > Probablement pas puisque si l'explorateur de Windows lui même ne peut pas...

Renfield > C'est une idée. Ça sera aux utilisateurs de changer ça car je ne suis pas dans leur tête moi.
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Ca marche aussi si tu n'as pas les droits de lecture dans un répertoire ?
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
tu pourrais 'optionnaliser' le parametre :

Public Function ThingExist(Path As String, Optional ThingType As VbFileAttribute = VbNormal) As Boolean
On Error Resume Next
ThingExist ((GetAttr(Path) And ThingType) ThingType)
Err.Clear
End Function
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
API FileExist ??? jamais entendu parler de cela.
Messages postés
15
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
14 mars 2006

juste pour info, j'utilise la fonction DIR pour faire cela. du genre :

Private Sub toto()
Dim myFile As String, myPath As String
myPath = "c:\textes"
myFile = Dir(myPath & "\*.doc", vbNormal + vbHidden)
'le 2e paramètre est facultatif, il permet de dire ce que l'on cherche
Do While myFile <> ""
'faire qq chose
myFile = Dir 'pour prendre le fichier suivant
Loop
End Sub

Je fais çà depuis des années ds des processus pro et je n'ai jamais eu de pb.