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

Karin.code 179 Messages postés vendredi 2 septembre 2016Date d'inscription 30 août 2017 Dernière intervention - 13 avril 2017 à 21:33 - Dernière réponse : Karin.code 179 Messages postés vendredi 2 septembre 2016Date d'inscription 30 août 2017 Dernière intervention
- 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 

21 réponses

Répondre au sujet
vb95 1386 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 13 avril 2017 à 22:30
0
Utile
1
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

Karin.code 179 Messages postés vendredi 2 septembre 2016Date d'inscription 30 août 2017 Dernière intervention - 14 avril 2017 à 11:56
oups, je me suis trompé sur l'emplacement du message
Commenter la réponse de vb95
Karin.code 179 Messages postés vendredi 2 septembre 2016Date d'inscription 30 août 2017 Dernière intervention - Modifié par Karin.code le 13/04/2017 à 23:16
0
Utile
2
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"
vb95 1386 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 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é
Karin.code 179 Messages postés vendredi 2 septembre 2016Date d'inscription 30 août 2017 Dernière intervention > vb95 1386 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 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
Whismeril 10526 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 14 avril 2017 à 07:09
0
Utile
3
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.
Karin.code 179 Messages postés vendredi 2 septembre 2016Date d'inscription 30 août 2017 Dernière intervention - 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
vb95 1386 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention > Karin.code 179 Messages postés vendredi 2 septembre 2016Date d'inscription 30 août 2017 Dernière intervention - 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
Karin.code 179 Messages postés vendredi 2 septembre 2016Date d'inscription 30 août 2017 Dernière intervention > vb95 1386 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 16 avril 2017 à 15:10
Bonjour vb95,
Ah ok je comprends mieux merci
Commenter la réponse de Whismeril
cs_Le Pivert 4765 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - Modifié par cs_Le Pivert le 14/04/2017 à 11:12
0
Utile
4
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
Whismeril 10526 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 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.
cs_Le Pivert 4765 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention > Whismeril 10526 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 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"
vb95 1386 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 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
Karin.code 179 Messages postés vendredi 2 septembre 2016Date d'inscription 30 août 2017 Dernière intervention - 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
vb95 1386 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 14 avril 2017 à 11:30
0
Utile
4
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

cs_Le Pivert 4765 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 14 avril 2017 à 11:40
Est-ce le chemin? voir la réponse faite à Whismeril
vb95 1386 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention > cs_Le Pivert 4765 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 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
Karin.code 179 Messages postés vendredi 2 septembre 2016Date d'inscription 30 août 2017 Dernière intervention > vb95 1386 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention - 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
vb95 1386 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention > Karin.code 179 Messages postés vendredi 2 septembre 2016Date d'inscription 30 août 2017 Dernière intervention - 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
Karin.code 179 Messages postés vendredi 2 septembre 2016Date d'inscription 30 août 2017 Dernière intervention - Modifié par Karin.code le 14/04/2017 à 12:23
0
Utile
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
cs_ShayW 3233 Messages postés jeudi 26 novembre 2009Date d'inscription 6 décembre 2017 Dernière intervention - 16 avril 2017 à 10:58
0
Utile
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.