OVH Cloud OVH Cloud

Existence de fichier

8 réponses
Avatar
sebastanguy
Bonjour,

Je cherche =E0 tester l'existence d'un fichier sur un serveur
j'ai donc utilis=E9 la proc=E9dure que l'on m'avait=20
conseill=E9 :=20

>Private Function FileExists(ByRef sFile As String) As=20
Boolean
> On Error Resume Next
> FileExists =3D (GetAttr(sFile) And vbDirectory) =3D 0
>End Function

Elle marche super bien sur mon poste mais pas sur d'autres.
J'ai cherch=E9 ce qu'est GetAttr et vbdirectory
ca donne=20
fileexists=3D32 and 16 =3D 0
pouvez vous m'aider a comprendre cette function ou m'en=20
donner une autre qui marche mieux.

A plus.

8 réponses

Avatar
Bismark Prods
Tu devrais faire cela ainsi ! cela moins inutile sur la durée !

Public Enum TypeFichier
Alias = 64
Archive = 32
Directory = 16
Hidden = 2
Normal = 0
ReadOnly = 1
System = 4
Volume = 8
End Enum


Public Function FileExists(ByRef sFile As String, ByVal sType As
TypeFichier) As Boolean
On Error Resume Next

FileExists = (GetAttr(sFile) And sType) = 0
End Function
"sebastanguy" a écrit dans le message de
news:082b01c34d00$45028e40$
Bonjour,

Je cherche à tester l'existence d'un fichier sur un serveur
j'ai donc utilisé la procédure que l'on m'avait
conseillé :

Private Function FileExists(ByRef sFile As String) As


Boolean
On Error Resume Next
FileExists = (GetAttr(sFile) And vbDirectory) = 0
End Function



Elle marche super bien sur mon poste mais pas sur d'autres.
J'ai cherché ce qu'est GetAttr et vbdirectory
ca donne
fileexists2 and 16 = 0
pouvez vous m'aider a comprendre cette function ou m'en
donner une autre qui marche mieux.

A plus.
Avatar
Christophe QUEVAL
Bonjour,

Voici le code que j'utilise (APIs) à mettre dans un module "réservé aux
APIs" par exemple :

DECLARATIONS A INSERER :

Public Const INVALID_HANDLE_VALUE = -1
Public Const MAX_PATH = 260

Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type

Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA"
(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long)
As Long
Public Const FILE_ATTRIBUTE_DIRECTORY As Long = &H10

----------------------------------------------------------------------------
---------------------------------------
PROCEDURE POUR UN FICHIER :

Public Function FileExists(sSource As String) As Boolean

Dim WFD As WIN32_FIND_DATA
Dim hFile As Long

hFile = FindFirstFile(sSource, WFD)
FileExists = hFile <> INVALID_HANDLE_VALUE

Call FindClose(hFile)

End Function

----------------------------------------------------------------------------
---------------------------------------

PROCEDURE POUR UN DOSSIER :

Public Function FolderExists(sFolder As String) As Boolean

Dim hFile As Long
Dim WFD As WIN32_FIND_DATA

'remove training slash before verifying
sFolder = UnQualifyPath(sFolder)

'call the API pasing the folder
hFile = FindFirstFile(sFolder, WFD)

'if a valid file handle was returned,
'and the directory attribute is set
'the folder exists
FolderExists = (hFile <> INVALID_HANDLE_VALUE) And _
(WFD.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY)

'clean up
Call FindClose(hFile)

End Function

----------------------------------------------------------------------------
---------------------------------------

Public Function UnQualifyPath(ByVal sFolder As String) As String

'trim and remove any trailing slash
sFolder = Trim$(sFolder)

If Right$(sFolder, 1) = "" Then
UnQualifyPath = Left$(sFolder, Len(sFolder) - 1)
Else: UnQualifyPath = sFolder
End If

End Function



Espérant que cela vous aidera.

Christophe





"sebastanguy" a écrit dans le message de
news:082b01c34d00$45028e40$
Bonjour,

Je cherche à tester l'existence d'un fichier sur un serveur
j'ai donc utilisé la procédure que l'on m'avait
conseillé :

Private Function FileExists(ByRef sFile As String) As


Boolean
On Error Resume Next
FileExists = (GetAttr(sFile) And vbDirectory) = 0
End Function



Elle marche super bien sur mon poste mais pas sur d'autres.
J'ai cherché ce qu'est GetAttr et vbdirectory
ca donne
fileexists2 and 16 = 0
pouvez vous m'aider a comprendre cette function ou m'en
donner une autre qui marche mieux.

A plus.
Avatar
François Picalausa
Bonjour/soir,

pour ne pas réinventer la roue:
VbFileAttribute
Public Function FileExists _
( _
ByRef sFile As String, _
ByVal sType As VbFileAttribute _
) _
As Boolean
On Error Resume Next

FileExists = (GetAttr(sFile) And sType) = 0
End Function

A noter toutefois que la fonction telle qu'il la décrivait était correct:e
FileExists = (GetAttr(sFile) And vbDirectory) = 0
On teste non pas si le flag vbDirectory est présent mais au contraire, s'il
ne l'est pas!
Pour tester s'il s'agit d'un dossier:
FileExists = (GetAttr(sFile) And vbDirectory) = vbDirectory

Par contre, ce qui m'étonne, c'est qu'en numérique, il trouve
fileexists2 and 16 = 0, ce qui est vrai! La fonction fonctionnerait donc
correctement!

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


Bismark Prods wrote:
Tu devrais faire cela ainsi ! cela moins inutile sur la durée !

Public Enum TypeFichier
Alias = 64
Archive = 32
Directory = 16
Hidden = 2
Normal = 0
ReadOnly = 1
System = 4
Volume = 8
End Enum


Public Function FileExists(ByRef sFile As String, ByVal sType As
TypeFichier) As Boolean
On Error Resume Next

FileExists = (GetAttr(sFile) And sType) = 0
End Function
"sebastanguy" a écrit dans le message de
news:082b01c34d00$45028e40$
Bonjour,

Je cherche à tester l'existence d'un fichier sur un serveur
j'ai donc utilisé la procédure que l'on m'avait
conseillé :

Private Function FileExists(ByRef sFile As String) As


Boolean
On Error Resume Next
FileExists = (GetAttr(sFile) And vbDirectory) = 0
End Function



Elle marche super bien sur mon poste mais pas sur d'autres.
J'ai cherché ce qu'est GetAttr et vbdirectory
ca donne
fileexists2 and 16 = 0
pouvez vous m'aider a comprendre cette function ou m'en
donner une autre qui marche mieux.

A plus.


Avatar
Bismark Prods
je suis pas sur de bien comprendre le raisonnement !

comment faire alors pour avec une fonction universelle ?


"François Picalausa" a écrit dans le message de
news:
Bonjour/soir,

pour ne pas réinventer la roue:
VbFileAttribute
Public Function FileExists _
( _
ByRef sFile As String, _
ByVal sType As VbFileAttribute _
) _
As Boolean
On Error Resume Next

FileExists = (GetAttr(sFile) And sType) = 0
End Function

A noter toutefois que la fonction telle qu'il la décrivait était correct:e
FileExists = (GetAttr(sFile) And vbDirectory) = 0
On teste non pas si le flag vbDirectory est présent mais au contraire,


s'il
ne l'est pas!
Pour tester s'il s'agit d'un dossier:
FileExists = (GetAttr(sFile) And vbDirectory) = vbDirectory

Par contre, ce qui m'étonne, c'est qu'en numérique, il trouve
fileexists2 and 16 = 0, ce qui est vrai! La fonction fonctionnerait donc
correctement!

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


Bismark Prods wrote:
> Tu devrais faire cela ainsi ! cela moins inutile sur la durée !
>
> Public Enum TypeFichier
> Alias = 64
> Archive = 32
> Directory = 16
> Hidden = 2
> Normal = 0
> ReadOnly = 1
> System = 4
> Volume = 8
> End Enum
>
>
> Public Function FileExists(ByRef sFile As String, ByVal sType As
> TypeFichier) As Boolean
> On Error Resume Next
>
> FileExists = (GetAttr(sFile) And sType) = 0
> End Function
> "sebastanguy" a écrit dans le message de
> news:082b01c34d00$45028e40$
> Bonjour,
>
> Je cherche à tester l'existence d'un fichier sur un serveur
> j'ai donc utilisé la procédure que l'on m'avait
> conseillé :
>
>> Private Function FileExists(ByRef sFile As String) As
> Boolean
>> On Error Resume Next
>> FileExists = (GetAttr(sFile) And vbDirectory) = 0
>> End Function
>
> Elle marche super bien sur mon poste mais pas sur d'autres.
> J'ai cherché ce qu'est GetAttr et vbdirectory
> ca donne
> fileexists2 and 16 = 0
> pouvez vous m'aider a comprendre cette function ou m'en
> donner une autre qui marche mieux.
>
> A plus.




Avatar
André Joubert
C'est curieux, mais c'est vrai...
J'ai le même problème ici.
? fileexist("c:config.ini") ====> True
? fileexist("x:jaji.dir") ====> False
Alors que les deux fichiers existent réellement. C: = mon poste et x: = mon
thinkpad
Je cherche une solution et je reviens

André

"sebastanguy" wrote in message
news:082b01c34d00$45028e40$
Bonjour,

Je cherche à tester l'existence d'un fichier sur un serveur
j'ai donc utilisé la procédure que l'on m'avait
conseillé :

Private Function FileExists(ByRef sFile As String) As


Boolean
On Error Resume Next
FileExists = (GetAttr(sFile) And vbDirectory) = 0
End Function



Elle marche super bien sur mon poste mais pas sur d'autres.
J'ai cherché ce qu'est GetAttr et vbdirectory
ca donne
fileexists2 and 16 = 0
pouvez vous m'aider a comprendre cette function ou m'en
donner une autre qui marche mieux.

A plus.
Avatar
François Picalausa
Bonjour/soir,

J'en pense déjà qu'on peut simplifier le bloc if inutile...

If cRet = -1 Then
'fichier existe pas
Fichier_Existe = False
Else
'fichier existe
Fichier_Existe = True
End If

devient

Fichier_Existe = (cRet <> -1)
ou
Fichier_Existe = Not (cRet = -1)

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


yann wrote:
scusez, mais je trouve bien compliqué tout ça, y'a plus simple (à mon
avis) et sans API

regardez ceci:



'*******************************
' argument; chemin d'un fichier
' renvoit vrai si fichier existe sinon faux
'*******************************
Private Function Fichier_Existe(ByVal szFichier As String) As Boolean
Dim cRet As Currency

cRet = -1
On Error Resume Next
cRet = FileLen(szFichier)
On Error GoTo 0

If cRet = -1 Then
'fichier existe pas
Fichier_Existe = False
Else
'fichier existe
Fichier_Existe = True
End If

End Function
'*****************
' FIN
'*****************

alors, z'en pensez quoi?




"Bismark Prods" a écrit dans le message de news:

A ma connaissance cette méthode marche bien ! peut-etre faudrait-il
utiliser une autre constante si tu cherche un fichier ! Car là il
semble que tu veuille détecter un répertoire (Directory) ?

"sebastanguy" a écrit dans le message de
news:082b01c34d00$45028e40$
Bonjour,

Je cherche à tester l'existence d'un fichier sur un serveur
j'ai donc utilisé la procédure que l'on m'avait
conseillé :

Private Function FileExists(ByRef sFile As String) As


Boolean
On Error Resume Next
FileExists = (GetAttr(sFile) And vbDirectory) = 0
End Function



Elle marche super bien sur mon poste mais pas sur d'autres.
J'ai cherché ce qu'est GetAttr et vbdirectory
ca donne
fileexists2 and 16 = 0
pouvez vous m'aider a comprendre cette function ou m'en
donner une autre qui marche mieux.

A plus.




Avatar
yann
scusez, mais je trouve bien compliqué tout ça, y'a plus simple (à mon avis)
et sans API

regardez ceci:



'*******************************
' argument; chemin d'un fichier
' renvoit vrai si fichier existe sinon faux
'*******************************
Private Function Fichier_Existe(ByVal szFichier As String) As Boolean
Dim cRet As Currency

cRet = -1
On Error Resume Next
cRet = FileLen(szFichier)
On Error GoTo 0

If cRet = -1 Then
'fichier existe pas
Fichier_Existe = False
Else
'fichier existe
Fichier_Existe = True
End If

End Function
'*****************
' FIN
'*****************

alors, z'en pensez quoi?




"Bismark Prods" a écrit dans le message de news:

A ma connaissance cette méthode marche bien ! peut-etre faudrait-il


utiliser
une autre constante si tu cherche un fichier ! Car là il semble que tu
veuille détecter un répertoire (Directory) ?

"sebastanguy" a écrit dans le message de
news:082b01c34d00$45028e40$
Bonjour,

Je cherche à tester l'existence d'un fichier sur un serveur
j'ai donc utilisé la procédure que l'on m'avait
conseillé :

>Private Function FileExists(ByRef sFile As String) As
Boolean
> On Error Resume Next
> FileExists = (GetAttr(sFile) And vbDirectory) = 0
>End Function

Elle marche super bien sur mon poste mais pas sur d'autres.
J'ai cherché ce qu'est GetAttr et vbdirectory
ca donne
fileexists2 and 16 = 0
pouvez vous m'aider a comprendre cette function ou m'en
donner une autre qui marche mieux.

A plus.




Avatar
André Joubert
C'est bien,
Mais dans mon cas cela ne fonctionne pas,
car j'utilise des fichiers de longueur 0 pour effectuer
la synchronisation de mon ordi avec un autre.
André Joubert

P.S. Vous pouvez consulter mon autre réponse plus bas.

"yann" wrote in message
news:3f1953f3$0$28584$
scusez, mais je trouve bien compliqué tout ça, y'a plus simple (à mon


avis)
et sans API

regardez ceci:



'*******************************
' argument; chemin d'un fichier
' renvoit vrai si fichier existe sinon faux
'*******************************
Private Function Fichier_Existe(ByVal szFichier As String) As Boolean
Dim cRet As Currency

cRet = -1
On Error Resume Next
cRet = FileLen(szFichier)
On Error GoTo 0

If cRet = -1 Then
'fichier existe pas
Fichier_Existe = False
Else
'fichier existe
Fichier_Existe = True
End If

End Function
'*****************
' FIN
'*****************

alors, z'en pensez quoi?




"Bismark Prods" a écrit dans le message de news:

> A ma connaissance cette méthode marche bien ! peut-etre faudrait-il
utiliser
> une autre constante si tu cherche un fichier ! Car là il semble que tu
> veuille détecter un répertoire (Directory) ?
>
> "sebastanguy" a écrit dans le message de
> news:082b01c34d00$45028e40$
> Bonjour,
>
> Je cherche à tester l'existence d'un fichier sur un serveur
> j'ai donc utilisé la procédure que l'on m'avait
> conseillé :
>
> >Private Function FileExists(ByRef sFile As String) As
> Boolean
> > On Error Resume Next
> > FileExists = (GetAttr(sFile) And vbDirectory) = 0
> >End Function
>
> Elle marche super bien sur mon poste mais pas sur d'autres.
> J'ai cherché ce qu'est GetAttr et vbdirectory
> ca donne
> fileexists2 and 16 = 0
> pouvez vous m'aider a comprendre cette function ou m'en
> donner une autre qui marche mieux.
>
> A plus.
>
>