La fonction "Exists" ne fonctionne pas avec un String

Résolu
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 - 13 avril 2017 à 21:33
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre 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
A voir également:

7 réponses

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
13 avril 2017 à 22:30
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

0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2
Modifié le 14 avril 2017 à 11:58
oups, je me suis trompé sur l'emplacement du message
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2
Modifié le 13 avril 2017 à 23:16
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"
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 14 avril 2017 à 02:14
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é
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2 > vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024
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.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
14 avril 2017 à 07:09
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.
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2
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
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre 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
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2 > vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024
16 avril 2017 à 15:10
Bonjour vb95,
Ah ok je comprends mieux merci
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
Modifié le 14 avril 2017 à 11:12
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
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
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.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137 > Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024
Modifié le 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"
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
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
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
14 avril 2017 à 11:30
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

0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
14 avril 2017 à 11:40
Est-ce le chemin? voir la réponse faite à Whismeril
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
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
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2 > vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024
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
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169 > Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre 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
0
Karin.code Messages postés 183 Date d'inscription vendredi 2 septembre 2016 Statut Membre Dernière intervention 16 janvier 2018 2
Modifié le 14 avril 2017 à 12:23
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 :

0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
16 avril 2017 à 10:58
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
0
Rejoignez-nous