UN FILE/FOLDER EXISTS TRÈS UTILE, COMPLET ET SANS AUTES CHOSES QUE LES DLLS VB
ebe_tic
Messages postés15Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention14 mars 2006
-
13 oct. 2004 à 08:38
szwr
Messages postés6Date d'inscriptionjeudi 11 avril 2002StatutMembreDernière intervention21 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.
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és168Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention28 juillet 20091 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és404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 19 janv. 2007 à 08:08
Merci Renfield
Toujours aussi compétent et rapide
Bonne journée
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 18 janv. 2007 à 10:55
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és404Date d'inscriptionlundi 9 juin 2003StatutMembreDernière intervention 4 septembre 20131 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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 14 oct. 2004 à 08:51
Tu y es presque ;-)
If GetFileAttributes(szfile) And &H80000000& Then ABSENT
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és222Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention30 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és1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDerniè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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 13 oct. 2004 à 09:00
API FileExist ??? jamais entendu parler de cela.
ebe_tic
Messages postés15Date d'inscriptionjeudi 4 décembre 2003StatutMembreDernière intervention14 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.
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
18 janv. 2007 à 10:55
http://www.codyx.org/snippet_savoir-si-fichier-existe_65.aspx
18 janv. 2007 à 10:48
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
18 janv. 2007 à 10:28
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
14 oct. 2004 à 08:51
If GetFileAttributes(szfile) And &H80000000& Then ABSENT
13 oct. 2004 à 18:53
J'essaie de traduire en VB, vous corrigerez la syntaxe au besoin:
If GetFileAttributes(szfile) And 0x80000000 Then ABSENT
13 oct. 2004 à 18:44
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.
13 oct. 2004 à 10:40
13 oct. 2004 à 09:10
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
13 oct. 2004 à 09:00
13 oct. 2004 à 08:38
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.