Combine path & Variable...

Résolu
Hellien Messages postés 5 Date d'inscription mercredi 1 janvier 2014 Statut Membre Dernière intervention 2 janvier 2014 - Modifié par Hellien le 1/01/2014 à 15:39
Hellien Messages postés 5 Date d'inscription mercredi 1 janvier 2014 Statut Membre Dernière intervention 2 janvier 2014 - 2 janv. 2014 à 14:25
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...
A voir également:

4 réponses

NHenry Messages postés 15069 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 29 mai 2023 158
Modifié par NHenry le 1/01/2014 à 16:17
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"
1
Hellien Messages postés 5 Date d'inscription mercredi 1 janvier 2014 Statut Membre Dernière intervention 2 janvier 2014
1 janv. 2014 à 16:30
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?
0
NHenry Messages postés 15069 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 29 mai 2023 158
1 janv. 2014 à 16:33
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 ?
0
Hellien Messages postés 5 Date d'inscription mercredi 1 janvier 2014 Statut Membre Dernière intervention 2 janvier 2014
1 janv. 2014 à 16:44
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 ??
0
Hellien Messages postés 5 Date d'inscription mercredi 1 janvier 2014 Statut Membre Dernière intervention 2 janvier 2014
1 janv. 2014 à 17:12
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 !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
1 janv. 2014 à 17:55
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.
0
NHenry Messages postés 15069 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 29 mai 2023 158
1 janv. 2014 à 18:28
L'avantage principal de Path.Combine est de mettre les antislash là où ils n'ont pas été mis et qu'ils sont utiles.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 219
1 janv. 2014 à 18:46
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).
0
Hellien Messages postés 5 Date d'inscription mercredi 1 janvier 2014 Statut Membre Dernière intervention 2 janvier 2014
2 janv. 2014 à 14:25
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 !
0