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

ebe_tic Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 14 mars 2006 - 13 oct. 2004 à 08:38
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
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

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 74
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
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 janv. 2007 à 10:55
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 janv. 2007 à 10:48
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
cs_andrebernard Messages postés 404 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 4 septembre 2013 1
18 janv. 2007 à 10:28
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
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 oct. 2004 à 08:51
Tu y es presque ;-)

If GetFileAttributes(szfile) And &H80000000& Then ABSENT
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 oct. 2004 à 18:53
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
DeadlyPredator Messages postés 222 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 30 juin 2008
13 oct. 2004 à 18:44
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.
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
13 oct. 2004 à 10:40
Ca marche aussi si tu n'as pas les droits de lecture dans un répertoire ?
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 oct. 2004 à 09:10
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
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 oct. 2004 à 09:00
API FileExist ??? jamais entendu parler de cela.
ebe_tic Messages postés 15 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 14 mars 2006
13 oct. 2004 à 08:38
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.
Rejoignez-nous