La fonction "Exists" ne fonctionne pas avec un String [Résolu]

Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
- 13 avril 2017 à 21:33 - Dernière réponse :
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
- 16 avril 2017 à 15:10
Bonsoir,

cette question paraît simple pour n'importe qui :
Si on utilise une OpenFileDialog ça fonctionne sans aucun problème :
Imports System.IO
Imports System.IO.File
Public Class Form1
Private Chemin As New OpenFileDialog
Private Fichier As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Chemin.ShowDialog = Windows.Forms.DialogResult.OK Then
Fichier = Chemin.FileName
If Exists(Fichier) Then
MsgBox("Le fichier existe")
Else
MsgBox("Le fichier n'existe pas")
End If
End If
End Class

Dans mon cas je veux mettre le chemin d'accès directement comme ça :
Imports System.IO
Imports System.IO.File
Public Class Form1
Private Chemin As New OpenFileDialog
Private Fichier As String ="‪D:\ Document\Calcul.xlsm"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If Exists(Fichier) Then
MsgBox("Le fichier existe")
Else
MsgBox("Le fichier n'existe pas")
End If
End Class

mais là ça ne fonctionne pas et j'arrive pas à comprendre pourquoi
le fichier existe vraiment, j'ai récupérer le chemin d'accès à partir de : propriété -> sécurité -> nom de l'objet
merci d'avance pour votre aide
Afficher la suite 

Votre réponse

21 réponses

Messages postés
1706
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 13 avril 2017 à 22:30
0
Merci
Bonsoir
C'est normal l'espace devant le D de Document dans le chemin du fichier ?
Devant Exists il faut un point : .Exists et le File va devant Exists

On importe System.IO et on utilise directement la classe File


Imports System.IO
Public Class Form1
Private Chemin As New OpenFileDialog
Private Fichier As String ="‪D:\Document\Calcul.xlsm"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If File.Exists(Fichier) Then
MsgBox("Le fichier existe")
Else
MsgBox("Le fichier n'existe pas")
End If
End Class

Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
- 14 avril 2017 à 11:56
oups, je me suis trompé sur l'emplacement du message
Commenter la réponse de vb95
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
- Modifié par Karin.code le 13/04/2017 à 23:16
0
Merci
Bonsoir vb95,
merci de m'avoir répondu
j'ai fait copier-coller de ton compte (tu as oublié End Sub avant End Class)
ça ne fonctionne toujours pas

J'ai essayé ça :
   Private Chemin As New OpenFileDialog
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If Chemin.ShowDialog = Windows.Forms.DialogResult.OK Then
TextBox1.Text = Chemin.FileName
End If
End Sub

Je démarre le débogage,
Je clique sur le Bouton2 et je choisi le fichier Calcul alors le chemin d’accès s'affiche dans la TextBox, je copie le chemin, après j’arrête le débogage
je colle le chemin dans Private Fichier As String = ""
je relance le débogage, en cliquant sur le Bouton1 le message qui s'affiche est : "le Fichier existe"
mais quand je met le chemin obtenu à partir de : propriété -> sécurité -> nom de l'objet
le message qui s'affiche est : "le Fichier n'existe pas"
je ne vois pas la différence entre :
Chemin obtenu à partir d'une OpenFileDialog : "D:\Document\Calcul.xlsm"
Chemin obtenu à partir de propriété -> sécurité -> nom de l'objet : "‪D:\Document\Calcul.xlsm"
Messages postés
1706
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 14 avril 2017 à 01:48
Salut Karin.code
toi aussi tu as oublié le End Sub ( j'ai juste fait un copier-coller de ton code d'origine lol ).
Les chemins sont identiques dans les 2 cas

Et je viens d'essayer sur un fichier qui existe vraiment : cela ne fonctionne pas directement
Et c'est tout à fait normal : le fichier n'est pas ouvert et il faut l'ouvrir avec Openfiledialog
I y a d'autres méthodes pour ouvrir un fichier ( avec les API de Windows) mais c'est plus compliqué
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
>
Messages postés
1706
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 14 avril 2017 à 11:58
Salut vb95,
toi aussi tu as oublié le End Sub ( j'ai juste fait un copier-coller de ton code d'origine lol ).
hhhhhhhh c'est vrai
je ne savais pas que Openfiledialog ouvre le fichier et le ferme avant de récupérer le chemin d'accès.
Commenter la réponse de Karin.code
Messages postés
12265
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 14 avril 2017 à 07:09
0
Merci
Bonjour

File.Exists fonctionne parfaitement avec une string, la preuve est que Chemin.FileName est une string.
D'autre part, j'ai de nombreuse fois écrit un chemin dans le code et ça marche aussi.

Je pense que le problème vient du copier/coller. J'ai déjà vu, lors d'un copier/coller depuis internet qu'un caractère invisible se glisse dans la string, et donc qu'elle ne soit pas rigoureusement égale à ce que l'on cherche.
Pour valider, ou pas, cette hypothèse, peux tu effacer "‪D:\Document\Calcul.xlsm" et le réécrire à la main.
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
- 14 avril 2017 à 11:58
Salut Whismeril,
c'est vrai quand je fais copier-coller du chemin d'accès ça ne fonctionne pas, mais quand je le retape à la main ça fonctionne sans problème
juste par curiosité est-il possible d'afficher ce caractère invisible
Messages postés
1706
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 novembre 2018
>
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
- 16 avril 2017 à 11:17
Bonjour Karin.code
Ce caractère invisible n'est peut-être pas affichable
Prends l'exemple du caractère de code ASCII 08 : c'est le BackSpace
C'est le retour arrière ou espace arrière pour une machine à écrire (backspace en anglais) est une touche présente sur tous les claviers de saisie située juste au-dessus de la touche entrée et qui est utilisée pour « revenir en arrière ».
Ce caractère n'est pas affichable
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
>
Messages postés
1706
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 16 avril 2017 à 15:10
Bonjour vb95,
Ah ok je comprends mieux merci
Commenter la réponse de Whismeril
Messages postés
5531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
- Modifié par cs_Le Pivert le 14/04/2017 à 11:12
0
Merci
Bonjour a tous,

Effectivement j'ai essayé et Karin.code a raison, de cette manière cela ne fonctionne pas!

j'ai donc trouvé cela qui fonctionne parfaitement:

  Dim curFile As String = "‪D:\Document\Calcul.xlsm"
        MsgBox(If(File.Exists(curFile), "File exists.", "File does not exist."))


https://msdn.microsoft.com/fr-fr/library/system.io.file.exists(v=vs.110).aspx

Je viens de réessayer la 1ère version, c'est la variable Fichier qui n'est pas reconnu!

 Dim curFile As String = "D:\Document\Calcul.xlsm"
       If File.Exists(curFile) Then
            MsgBox("Le fichier existe")
        Else
            MsgBox("Le fichier n'existe pas")
        End If


Fichier est un nom réservé certainement!

@+ Le Pivert
Messages postés
12265
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 14 avril 2017 à 11:17
Voilà qui est surprenant, dans l'absolue les deux codes font la même chose.
C'est juste la notation du If qui change.
Messages postés
5531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
>
Messages postés
12265
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 14 avril 2017 à 11:38
Les 2 codes fonctionnent chez moi, la seule différence est le chemin vis à vis de Karin.code:

"C:\Users\LePivert\Documents\lienhypertexte.xls"
Messages postés
1706
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 14 avril 2017 à 11:55
Fichier n'a jamais été un nom réservé !
Je m'en suis assez souvent servi
Je viens d'essayer avec les 2 blocs de code IF en affichant les 2 MsgBox à la suite


Imports System.IO

Public Class Form1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Dim curFile As String = "‪D:\MDP.txt"
MsgBox(If(File.Exists(curFile), "Le fichier existe", "Le fichier n'existe pas"))

If File.Exists(curFile) Then
MsgBox("Le fichier existe")
Else
MsgBox("Le fichier n'existe pas")
End If

End Sub

End Class


Cela me met dans les 2 cas que le fichier n'existe pas
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
- 14 avril 2017 à 12:00
Salut cs_Le Pivert,
cette format et là même que celle de Excel je ne savais pas qu'on peut vais utiliser If comme ça
If(test_logique,Valeur_si_vrai,Valeur_si_faux)
SI(test_logique,Valeur_si_vrai,Valeur_si_faux)
comme l'a dit Whismeril le problème vient de copier-coller du chemin d'accès
Commenter la réponse de cs_Le Pivert
Messages postés
1706
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 14 avril 2017 à 11:30
0
Merci
bonjour à tous
cs_Le Pivert : tu dis que ton code fonctionne
voici le mien et la chaine
"D:\MDP.txt
a été rentrée manuellement au clavier et le fichier existe ( la preuve sur l'image jointe )
si je lance le projet cela m'affiche que le fichier n'existe pas
C'est moi qui "déconne" ou c'est Windows ?
L'hypothèse de Whismeril tomberait donc à l'eau ?




Imports System.IO

Public Class Form1

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Dim curFile As String = "‪D:\MDP.txt"
MsgBox(If(File.Exists(curFile), "File exists.", "File does not exist."))

End Sub

End Class

Messages postés
5531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 14 avril 2017 à 11:40
Est-ce le chemin? voir la réponse faite à Whismeril
Messages postés
1706
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 novembre 2018
>
Messages postés
5531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 14 avril 2017 à 12:19
Salut cs_Le Pivert
Le chemin est correct ainsi que le nom du fichier ( voir ma réponse n° 7 avec l'image jointe)
et tout a été rentré manuellement au clavier
et chez moi aucun des 2 codes ne fonctionnent

a tout hasard j'ai Visual Studio Community 2017 : y aurat-il un bug à ce niveau ?
J'avoue ne plus savoir quoi penser

Par contre avec un OpenfileDialog les 2 codes fonctionnent nickel
Affaire à suivre
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
>
Messages postés
1706
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 14 avril 2017 à 12:29
Salut vb95,
même en réécrivant le chemin d'accès manuellement ?
pour moi ça n'a pas fonctionné parce que je faisais copier-coller du chemin d'accès, mais quand je l'ai réécris manuellement ça a fonctionné pour les deux fonctions
Messages postés
1706
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
18 novembre 2018
>
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
- 14 avril 2017 à 12:36
Salut Karin.code
Ca y est : cela fonctionne enfin !
Et pourtant je copiais le chemin entièrement à la main et précision je suis à jeun lol !
Ce sont les bizarreries de l'informatique !
si c'est bon tu pourras fermer le post
A + et bonne journée
Commenter la réponse de vb95
Messages postés
183
Date d'inscription
vendredi 2 septembre 2016
Dernière intervention
16 janvier 2018
- Modifié par Karin.code le 14/04/2017 à 12:23
0
Merci
Bonjour tout le monde,
tout d'abord merci pour votre aide j'ai appris beaucoup de choses en lisant vos réponses
comme l'a dit vb95 les deux fonctions ne fonctionne pas (si on fait copier-coller du chemin d'accès ):
Public Class Form1
Dim curFile As String = "D:\Document\Calcul.xlsm"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If IO.File.Exists(curFile) Then
MsgBox("Le fichier existe")
Else
MsgBox("Le fichier n'existe pas")
End If
End Sub
End Class


Public Class Form1
Dim curFile As String = "D:\Document\Calcul.xlsm"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox(If(IO.File.Exists(curFile), "Le fichier existe", "Le fichier n'existe pas"))
End Sub
End Class


et comme l'a dit Whismeril si on le réécrire à la main les deux fonctions marche sans aucun problème :

Commenter la réponse de Karin.code
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 16 avril 2017 à 10:58
0
Merci
Bonjour Karin.code

mais quand je met le chemin obtenu à partir de : propriété -> sécurité -> nom de l'objet
le message qui s'affiche est : "le Fichier n'existe pas"


j'ai essayé de reconstituer et cela dépend comment tu marques le nom
de l'objet avec la souris à vue d'oeil on ne ne voit pas la différence
lance ton code et accède
propriété -> sécurité -> nom de l'objet


Nom de l'objet D:\Document\Calcul.xlsm

Si tu places le curseur sur la lettre D et commence à marquer
le reste et copie dans le textbox le fichier exists

mais si tu places le curseur à gauche de la lettre D et commence à marquer le reste et copie dans le textbox le fichier n'existe pas
parcequ'il contient un caractère de plus
Commenter la réponse de cs_ShayW

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.