OVH Cloud OVH Cloud

vérifier l'existance d'un fichier

20 réponses
Avatar
shoei
Bonjour,

Est-il possible de vérifier l'existance d'un fichier sans passer par la
commande open et verifier le code erreur?
Je n'est pas besoin d'ouvrir le fichier.

merci a tous

10 réponses

1 2
Avatar
Jean-marc
Guy DETIENNE wrote:
Salut ;O)

Il existe aussi l'API PathFileExists

Utilisation :
Private Declare Function PathFileExists Lib "shlwapi.dll" Alias
"PathFileExistsA" (ByVal pszPath As String) As Long

Msgbox CStr(CBool(PathFileExists("c:MyDirectoryMyFile.exe")))



Hello,

Cette fonction peut être bien utile mais elle a un limitation:
Elle ne fonctionne qu'avec le file system local ou avec un lecteur
réseau monté en lecteur local.

Par exemple, on ne peut pas faire :

PathFileExists(fieldmesdocstutu.doc)

Ceci est documenté ici:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/shlwapi/path/pathfileexists.asp


C'est un inconvénient que n'a pas par exemple l'implémentation
de la FAQ utilisant GetAttr:

Function FileExists(sFileName As String) As Boolean
On Error Resume Next
FileExists = ((GetAttr(sFileName) And vbDirectory) = 0)
End Function

Private Sub Command1_Click()

If FileExists("ChrisdeskJMexchgresults.txt") Then
MsgBox "le fichier existe"
End If

End Sub

Tout dépend de l'usage que l'on veut faire de la fonction,
mais la contrainte est quand même très forte, surtout aujourd'hui
ou les environnements réseaux (même domestiques) sont devenus
monnaie courante.

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
andre.araste
Bonjour

Voici encore plus simple :
' Fich contient le nom du fichier en String

If Dir$(Fich) = "" Then
MessageBox.Show("Le Fichier " & Fich & " est introuvable dans le dossier
courant : " & vbCrLf & My.Application.Info.DirectoryPath)
ELSE
... le fichier est trouvé on continue ...
End If
--
Bonne réception.

http://perso.orange.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.



"shoei" a écrit dans le message de news:

Bonjour,

Est-il possible de vérifier l'existance d'un fichier sans passer par la
commande open et verifier le code erreur?
Je n'est pas besoin d'ouvrir le fichier.

merci a tous


Avatar
Jacques93
Bonjour andre.araste,
andre.araste a écrit :
Bonjour

Voici encore plus simple :
' Fich contient le nom du fichier en String

If Dir$(Fich) = "" Then
MessageBox.Show("Le Fichier " & Fich & " est introuvable dans le dossier
courant : " & vbCrLf & My.Application.Info.DirectoryPath)
ELSE
... le fichier est trouvé on continue ...
End If



Tiens, d'habitude c'est plutôt l'inverse : on pose des questions sur
.Net ou VB 2005

Un moment d'égarement, sans doute ;-)

--
Cordialement,

Jacques.
Avatar
LE TROLL
Bonsoir Jacques,

Oui en multipostes effectivement, ou si des interdictions d'exploitation
existent, il y aura d'autre erreurs...
Je me me place toujours en monoposte, sans limitation de droit, j'ai très
peu de mois programmé en réseau, alors je n'ai absolument pas le reflexe
réseau...

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jacques93" a écrit dans le message de news:

Bonjour LE TROLL,
LE TROLL a écrit :
Bonjour,

La réponse que l'on t'a fait est excellente, toutefois, coté code et
pour rester VB, je crois que le plus court c'est de tenter l'ouverture
comme d'habitude en lecture, et s'il y a erreur (introuvable), de créer
le fichier...

dim p
freefile...
on error goto erreur
open input
read...
close
goto suite
erreur:
if err = inexistant = on créé = open OUtput
suite:
etc...





Et si l'erreur est due à un problème de droit (NTFS) ou de verrouillage
(déjà ouvert avec un Lock), etc., que se passe t-il?

Quelques erreurs possible lors de l'ouverture d'un fichier :

52 : Nom ou numéro de fichier incorrect
53 : Fichier introuvable
54 : Mode d'accès au fichier incorrect
55 : Fichier déjà ouvert
57 : Erreur d'entrée/sortie de périphérique
58 : Ce fichier existe déjà
68 : Périphérique non disponible
69 : Erreur définie par l'application ou par l'objet
70 : Permission refusée
71 : Disque non prêt
75 : Erreur dans le chemin d'accès
76 : Chemin d'accès introuvable

Ne crois pas qu'il y ait un complot contre toi aujourd'hui ;-) , mais
Shoei indique bien dans sa question qu'il n'a pas besoin d'ouvrir le
fichier, mais juste tester son existence.
--
Cordialement,

Jacques.


Avatar
LE TROLL
Bonjour,

Certes, mais pour tester une chose simple en VB, que l'on doive
programmer dans un autre langage avec tant de code, ça me perturbe, c'est
sans doute que je n'ai pas l'habitude des réseaux, car en logiciel
monotâche, jamais je n'ai eu ce genre de problème...
Le seul cas où je pourrais avoir des trucs pareil, c'est si la personne
recopiait l'exe dans le même répertoire que l'original, et lançait les deux
exe qui pomperaient sur le même fichier, mais là je dirais que je ne suis
pas responsable des expériences chimiques...
A priori les réflexes ne sont pas les mêmes, il y a davantage d'incidences
en réseau c'est certain... Simple regret, qu'il en faille tant pour si peu,
et en d'autres langues... C'est une question récurrente cette présence de
fichier, on dirait que VB, vient bien de B, et donc du PC, ce n'est peut
être pas le bon langage pour le multipostes ou le réseau...

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a écrit dans le message de
news: %
pour ma part j'utilise une fonction que j'ai créé et dont je suis tout à
fait satisfait

Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Private 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 * 260
cAlternate As String * 14
End Type

Private Declare Function FindFirstFile Lib "kernel32" Alias
"FindFirstFileA" _
(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As
Long

Public Function ExisteFichier(Fichier As String) As Boolean
Dim WFD As WIN32_FIND_DATA, hSearch As Long
hSearch = FindFirstFile(Fichier, WFD)
ExisteFichier = (hSearch <> -1)
FindClose (hSearch)
End Function

La fonction renvoie True si le fichier existe

Nom_Du_Fichier="MonRépertoire/MonFichier.txt"
If ExisteFichier(Nom_du Fichier) then
TraitementFichierExistant
else
TraitementFichierAbsent
End If


"LE TROLL" <le a écrit dans le message de news:

Bonjour,

La réponse que l'on t'a fait est excellente, toutefois, coté code et
pour rester VB, je crois que le plus court c'est de tenter l'ouverture
comme d'habitude en lecture, et s'il y a erreur (introuvable), de créer
le fichier...

dim p
freefile...
on error goto erreur
open input
read...
close
goto suite
erreur:
if err = inexistant = on créé = open OUtput
suite:
etc...


--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"shoei" a écrit dans le message de
news:
Bonjour,

Est-il possible de vérifier l'existance d'un fichier sans passer par la
commande open et verifier le code erreur?
Je n'est pas besoin d'ouvrir le fichier.

merci a tous







--------------------------------------------------------------------------------
J'utilise la version gratuite de SPAMfighter pour utilisateurs privés.
359 e-mails spam ont été bloqués jusqu'à maintenant.
Les utilisateurs payant n'ont pas ce message dans leurs e-mails.
Essayez SPAMfighter gratuitement maintenant!




Avatar
Jacques93
Bonsoir LE TROLL,
LE TROLL a écrit :
Bonsoir Jacques,

Oui en multipostes effectivement, ou si des interdictions d'exploitation
existent, il y aura d'autre erreurs...
Je me me place toujours en monoposte, sans limitation de droit, j'ai très
peu de mois programmé en réseau, alors je n'ai absolument pas le reflexe
réseau...




Pas obligatoirement réseau. Tu n'as qu'à prendre XP avec plusieurs
sessions ouvertes simultanément, ce qui est maintenant courant avec
la bascule rapide entre utilisateurs ...

Tester le ou les bons codes erreur n'est pas superflu, à mon avis :-)
Et ça ne complique pas énormément la gestion d'erreur. A la place de

erreur:
if err = inexistant

tu peux utiliser un truc du genre

erreur:
Select Case Err.Number
Case x
'Action à faire
Case y
'Action à faire

' etc...
Case Else
'Action à faire
End Select

--
Cordialement,

Jacques.
Avatar
LE TROLL
Bonjour,

Quand les questions sont des questions de débutant en "VB", j'en déduis
que la personne ne connaît pas VB pour poser une telle question, y vois-tu
une erreur fondamentale de raisonnement ?

Donc j'anticipe en donnant une réponse de base immédiatement
exploitable...

Et on peut légitimement se poser la question, quand on demande comment
faire une routine d'erreur ou tester la présence d'un fichier, c'est qu'on
débute en VB, sinon on sait le faire ou le contourner, où trouver avec les
API des exemples sur le Net...

De ce fait, on peut se poser la question de savoir s'il est bon de
répondre stricto sensu à la personne, ce qui peut éventuellement ne pas lui
rendre service car il y a plus simple.
Je tente de raisonner et d'anticiper la question, d'autre se borne à
répondre à la question.
Ce sont des raisonnement différents, dont aucun n'est bon, car si on peut se
poser ce genre de dilemme, c'est que la question n'est pas assez précise,
faute d'explications...

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Vincent Guichard" a écrit dans le message de
news: 46040b5a$0$27366$
Extraits choisis:

Shoei:
>Est-il possible de vérifier l'existance d'un fichier sans passer par la
>commande open et verifier le code erreur?

LE TROLL:
>[...]tenter l'ouverture comme d'habitude en lecture, et s'il y a erreur
>(introuvable)[...]

avec à suivre un exemple de code utilisant la commande open et vérifiant
le code d'erreur.

Dans l'absolu, je pense qu'utiliser Open et tester le code de retour peut
être une bonne idée, mais si le PO demande explicitement une autre
solution, je suppose que ça veux dire qu'il la connaît déjà. Pourquoi lui
resservir?

Vincent Guichard



Avatar
LE TROLL
Oui, mais le Môsieur, s'il pose ce genre de question c'est qu'il n'a pas
l'habitude de VB, car sinon il ne poserait pas ce genre de question, ce qui
implique que le Môsieur demande peut être une chose compliquée sans savoir
qu'il y en a une plus simple, ceci est mon raisonnement et j'y applique un
réponse ensuite...

Depuis tout à l'heure on me reproche en gros de ne pas réfléchir comme
un ordinateur en binaire, si je comprends bien, il a posé telle question, on
doit répondre à la question, sans réfléchir sur sa nature. Désolé, j'ai un
raisonnement moins mécanique, je n'utilise pas le binaire mais les acides
électrisés, ce qui amène comme tu le vois des réponses déférentes...

A t'entendre, et tu sais sans doute qu'en philosophie par exemple, afin
de savoir ce que donnerait une idée, il faut là pousser à son paroxysme,
j'en déduis, que toi, si un enfant te demande comment on tire, tu lui
expliques (forcément c'est la question), ben moi je tente de lui dire qu'il
est trop petit, et qu'il faut qu'il commence par autre chose... Et aucun de
nos raisonnements ne sont faux, il m'est arrivé en répondant ainsi, que l'on
me dise "ah, on pouvait faire ça, mais c'est mieux, et c'est plus court"...

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"thierry.bipppppp" a écrit dans le message de
news: uwK$
Le monsieur te dit qu'il ne veut pas passer par la commande open .....




"LE TROLL" <le a écrit dans le message de news:

Bonjour,

La réponse que l'on t'a fait est excellente, toutefois, coté code et
pour rester VB, je crois que le plus court c'est de tenter l'ouverture
comme d'habitude en lecture, et s'il y a erreur (introuvable), de créer
le fichier...

dim p
freefile...
on error goto erreur
open input
read...
close
goto suite
erreur:
if err = inexistant = on créé = open OUtput
suite:
etc...


--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"shoei" a écrit dans le message de
news:
Bonjour,

Est-il possible de vérifier l'existance d'un fichier sans passer par la
commande open et verifier le code erreur?
Je n'est pas besoin d'ouvrir le fichier.

merci a tous










Avatar
SAISAS
Bonjour,

tellement de réponses à ta question que je ne résiste pas à ajouter la
mienne : si effectivement tu souhaites uniquement savoir si le fichier
existe, la fonction dir() est parfaite.

Si jamais tu souhaites ensuite l'utiliser, il est plutôt souhaitable de
vérifier qu'il existe ... et je n'ajouterai pas une pierre supplémentaire à
mes brillants confrères, si ce n'est que si tu souhaites effectivement
l'ouvrir, je ne vois pas en quoi l'ouvrir dans ton code pose un problème
(:-))))))))))!.

Bonne réception.

"shoei" a écrit :

Bonjour,

Est-il possible de vérifier l'existance d'un fichier sans passer par la
commande open et verifier le code erreur?
Je n'est pas besoin d'ouvrir le fichier.

merci a tous


Avatar
Joël Chaudy [MS]
Bonjour LE TROLL,

Bienvenue dans le newsgroup public Microsoft dédié à Visual Basic.

Nous vous rappelons que ce groupe de discussion est exclusivement réservé à
l'usage des utilisateurs de Visual Basic qui souhaitent obtenir de l'aide
sur ce produit.
Afin de ne pas perturber la vie de ce forum, nous vous serions
reconnaissants d'éviter tous messages qui ne seraient pas en rapport direct
avec les thématiques liées à ce newsgroup ; il existe pour cela d'autres
groupes de discussions réservés.

En vous remerciant par avance de votre compréhension, nous vous informons de
la demande immédiate de suppression de votre message.

Cordialement,

Joël Chaudy
Responsable de la relation avec les Communautés techniques
Microsoft France

PS. Pour me répondre, retirer « online. » de l'adresse email utilisée pour
la diffusion de ce message.


"LE TROLL" <le a écrit dans le message de
news:%


------------------------------------------------------------------------------------
"Vincent Guichard" a écrit dans le message de
news: 46040b5a$0$27366$
Extraits choisis:

Shoei:
>Est-il possible de vérifier l'existance d'un fichier sans passer par la
>commande open et verifier le code erreur?

LE TROLL:
>[...]tenter l'ouverture comme d'habitude en lecture, et s'il y a erreur
>(introuvable)[...]

avec à suivre un exemple de code utilisant la commande open et vérifiant
le code d'erreur.

Dans l'absolu, je pense qu'utiliser Open et tester le code de retour peut
être une bonne idée, mais si le PO demande explicitement une autre
solution, je suppose que ça veux dire qu'il la connaît déjà. Pourquoi lui
resservir?

Vincent Guichard







1 2