Combine path & Variable... [Résolu]

Messages postés
5
Date d'inscription
mercredi 1 janvier 2014
Dernière intervention
2 janvier 2014
-
Bonjour, j'ai fais le tour des internets et je n'ai trouvé aucune solution à mon problème et j'espere qu'un d'entre vous m'aidera à le résoudre car cela fait maintenant 1 semaine que je bloque...

Voici mon problème

Je selectionne un text dans la listbox make_box pour ensuite utiliser le text choisi comme variable dans un repertoire pour ouvrir le document text contenant justement ce text-ci (make_box.SelectedItem) .... Voici mon code


Dim streamer As IO.StreamReader
Dim textfile As String

Private Sub model_box_Click(sender As Object, e As EventArgs) Handles model_box.Click

model_box.Items.Clear()
Dim modeltxt As String = make_box.SelectedItem
Dim debut As String = Directory.GetCurrentDirectory
Dim milieu As String = "\"
Dim fin As String = ".txt"

If make_box.Text = Nothing Then
model_box.BackColor = Color.Red
model_box.ForeColor = Color.Yellow
Else
model_box.BackColor = Color.White
model_box.ForeColor = Color.Black

textfile = Path.Combine(debut, milieu, modeltxt, fin)

streamer = IO.File.OpenText(textfile)
Dim mystring() As String = streamer.ReadToEnd.Split(vbNewLine)

model_box.Items.AddRange(mystring)

End If

End Sub

puis j'obtien une erreur à cette ligne

textfile = Path.Combine(debut, milieu, modeltxt, fin)

Exception: Thrown: "Caractères non conformes dans le chemin d'accès." (system.argumentException)
A System.ArgumentException was thrown: "Caractères non conformes dans le chemin d'Accès."
Thread: Main Thread [972]

et aussi

A first chance exception of type 'System.ArgumentException' occurred in mscorlib.dll

quelqu'un pourrait-il m'éclairer sur le problème car j'ai utiliser plusieurs méthode pour inclure ma variable dans un filepath mais rien a faire toujours la même erreur.......

Merci...
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 décembre 2018
1
Merci
A la place de :
textfile = Path.Combine(debut, milieu, modeltxt, fin)
Essayes :
textfile = Path.Combine(debut, modeltxt+ fin)

Et regardes aussi par un espion le contenu de ta variable.

Penses aussi à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (Onglet références des propriétés du projet).
vbNewLine -> Environment.NewLine

On peut discuter avec celui qui sait.
On peut discuter avec celui qui ne sait pas.
On ne peut pas discuter avec celui qui croit savoir.
En VB.NET pensez à activer "Option Explicit" et "Option Strict"

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de NHenry
Messages postés
5
Date d'inscription
mercredi 1 janvier 2014
Dernière intervention
2 janvier 2014
0
Merci
Sa na rien changer.... Same old story, puis si je desactive Microsoft.visualbasic je ne peux plus utiliser le powerpack, puis ma variable fin donne ".txt" puis là variable début ne contient pas de backslash à la fin du répertoire... Le chemin par contre contien des espaces est ce ue sa pourrait influencer?
NHenry
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 décembre 2018
-
Peux-tu copier ici le résultat contenu dans les différentes variables ?
Car je peine à comprendre.

Sinon, quelles lignes pose pb si tu retires Microsoft.VisualBasic ?
Commenter la réponse de Hellien
Messages postés
5
Date d'inscription
mercredi 1 janvier 2014
Dernière intervention
2 janvier 2014
0
Merci
Dim streamer As IO.StreamReader
Dim textfile As String

Private Sub year_box_Click(sender As Object, e As EventArgs) Handles year_box.Click
year_box.Items.Clear()
For i = 1970 To 2014
year_box.Items.Add(i)
Next
End Sub

Private Sub make_box_Click(sender As Object, e As EventArgs) Handles make_box.Click
make_box.Items.Clear()
textfile = "car.txt"
streamer = IO.File.OpenText(textfile)
Dim mystring() As String = streamer.ReadToEnd.Split(vbNewLine)
make_box.Items.AddRange(mystring)


End Sub

Private Sub model_box_Click(sender As Object, e As EventArgs) Handles model_box.Click

model_box.Items.Clear()
Dim modeltxt As String = make_box.SelectedItem
Dim debut As String = Directory.GetCurrentDirectory
Dim milieu As String = "\"
Dim fin As String = ".txt"

If make_box.Text = Nothing Then
model_box.BackColor = Color.Red
model_box.ForeColor = Color.Yellow
Else
model_box.BackColor = Color.White
model_box.ForeColor = Color.Black

textfile = Path.Combine(debut, modeltxt + fin)

streamer = IO.File.OpenText(textfile)
Dim mystring() As String = streamer.ReadToEnd.Split(Environment.NewLine)

model_box.Items.AddRange(mystring)

End If

End Sub


Donc

le contenu de car.txt
Acura
Alfa Romeo
AMC
Audi
Aston Martin
Bentley
BMW
Buick
Cadillac
Chevrolet
Chrysler
etc...

debut = "C:\Users\Carl\Google Drive\Facturation STE\Facturation STE\WindowsApplication1\bin\Debug"

milieu = "\"

modeltxt = " Cadillac"

fin = ".txt"

bon... je crois que j'ai trouvé le problème mais pourquoi la variable ajoute elle une espace au tout debut ??
Commenter la réponse de Hellien
Messages postés
5
Date d'inscription
mercredi 1 janvier 2014
Dernière intervention
2 janvier 2014
0
Merci
Bon Problème résolu ! J'ai utilisé modeltxt = modeltxt.Trim()

puis j'ai utilisé textfile = Path.Combine(debut, modeltxt + fin)

comme tu m'as indiqué NHenry Merci !
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
-
Bonjour,
on peut légitimement se demander pourquoi tu fais les frais de l'utilisation d'une méthode à coût élevé (Path.combine, dont la vocation est de "décortiquer" des combinaisons plus évoluées) alors que tu as affaire, toi, à un cas simple qui ne nécessite qu'une bête concaténation.
NHenry
Messages postés
14322
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 décembre 2018
-
L'avantage principal de Path.Combine est de mettre les antislash là où ils n'ont pas été mis et qu'ils sont utiles.
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
-
Bonjour, NHenry,
Cette méthode sert également à "combiner" intelligemment deux chemins. Chacun des deux chemins est "analysé" et la méthode retourne le chemin résultant "logique."
Cette méthode est assez coûteuse du fait même de ses nombreuses fonctionnalités. Si j'en crois cette lecture :
http://msdn.microsoft.com/fr-fr/library/fyy7a5kt%28v=vs.110%29.aspx
Cette méthode de VB.Net parait donc correspondre en tous points à la fonction PathCombine de la librairie "shlwapi.dll" de l'APi de Windows, dont la vocation n'est pas seulement de concaténer, mais également de "combiner" (chemins relatifs "partagés" compris).
Hellien
Messages postés
5
Date d'inscription
mercredi 1 janvier 2014
Dernière intervention
2 janvier 2014
-
C'est seulement parce que j'ai essayé plusieurs métode car je ne voyais pas l'espace devant ma variable... c'est donc la dernière formule que j'ai essayé, je pourrais effectivement m'en passer, mais je l'utilise aussi pour que le répertoire soit le bon autant en debug que si l'application serait build. Je ne savais pas par contre que cette fonction était lourde a se point merci !
Commenter la réponse de Hellien

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.