Comment recupere t on dans un fichier ini le chemin d'un repertoire

Résolu
PsYKrO Messages postés 53 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 3 mai 2005 - 4 août 2004 à 11:10
PsYKrO Messages postés 53 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 3 mai 2005 - 5 août 2004 à 13:07
Salut à tous

J'ai un fichier ini ou il y a des clés

genre

[REPERTOIRE]
repertoire1= C:\winnt\
repertoire2=C:\temp\
...

le nombre de clé est variable

J'utilise la fonction API

GetPrivateProfileSection()

elle me retourne évidemment toute les clés de mon fichier ini
sous forme d'une chaine de caractere et séparé par un espace pour différencié les clés

ex: repertoire1=C:\winnt\ repertoire2=C:\temp\ ..... ..... .....

Or au début c'etait super, je cherché les espaces pour récupérer
repertoire1=C:\winnt\

et apres je fesais un petit calcul pour recupere repertoire1 dans un variable et C:\winnt\ dans une autre...

ex: valeur = repertoire1
cle = C:\winnt

Tout mon programme marché nikel sauf le jour ou je decidé de mettre dans mon fichier ini:

repertoire1=C:\Documents and Setting\

La il ya 2 espaces ..... le logicel a planté car il récupère que C:\Documents et ce n'est pas un repertoire.

Alors ma question est comment peut on lui dire de lire toutes les clés... et a chaque retour chariot ou fin de ligne c'est une cle

en gros je veux trouvé une solution pour eviter ce genre d'erreur (espace)

8 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
4 août 2004 à 12:50
Salut,

Je suis OK avec crenaud76, il vaut mieux utiliser GetPrivateProfileString surtout si tu connais le nom des clés.

Mais, ton GetPrivateProfileSection() m'a rappelé un truc que je m'étais amusé à coder, je ne sais plus pour quelle occasion. Ca devait permettre de lire un fichier ini sans connaitre ni les sections ni les clés.

Je te livre le bout qui lit le nom des clés et leur valeur. Pour tester, une form avec une listbox (list1).

Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Private Sub Form_Load()
Dim NomSection As String
Dim NomFicINI As String
Dim Buffer As String
Dim NbCar As Integer
Dim i As Integer
Dim ListeCle() As String
Dim DecoupageCle() As String

NomSection = "Projet1"
NomFicINI = "c:\test.ini"

' Lecture du nombre de caractères de la section (32767 c le max)
Buffer = String(32767, 0)
NbCar = GetPrivateProfileSection(NomSection, Buffer, Len(Buffer), NomFicINI)

' Lecture des clés de la section
Buffer = String(NbCar + 1, 0)
NbCar = GetPrivateProfileSection(NomSection, Buffer, Len(Buffer), NomFicINI)

' Séparation des différentes clés
ListeCle = Split(Buffer, Chr(0))

For i = 0 To UBound(ListeCle) - 2
DecoupageCle = Split(ListeCle(i), "=")
List1.AddItem "Clé : " & DecoupageCle(0) & " - Valeur : " & DecoupageCle(1)
Next

End Sub

Cordialement

CanisLupus
3
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
4 août 2004 à 12:55
Heu....

A la place de :

Lecture des clés de la section
Buffer = String(NbCar + 1, 0)
NbCar = GetPrivateProfileSection(NomSection, Buffer, Len(Buffer), NomFicINI)

' Séparation des différentes clés
ListeCle = Split(Buffer, Chr(0))

Un simple :

' Séparation des différentes clés
ListeCle = Split(Left(Buffer, NbCar + 1), Chr(0))

suffit.

Cordialement

CanisLupus
3
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
4 août 2004 à 11:24
Heu !! A ma connaissance, GetPrivateProfileString te retourne un buffer ou les clés sont séparées par un Nullchar, pas par un espace !!! Donc tu devrais pas avoir de souci en faisant ton Split sur vbNullChar, plutôt que sur un espace

De toute facon si tu veux juste lire une clé, tu peux utiliser GetPrivateProfileString() plutot que GetPrivateProfileSection()!
Ex de code (de mémoire car j'ai pas de VB sous la main)
Dim Buffer as String,Ret as String,Valeur as String
Buffer = String$(255,vbNullChar)
Ret = GetPrivateProfileString("LaSection","LaCle","",Buffer,255,"Fichier.ini")
Valeur = Left$(Buffer,Ret)

Un truc dans le genre fonctionne bien.

Christophe R.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
4 août 2004 à 11:26
Excuses-moi ! Il faut déclarer Ret en Long, pas en String

Christophe R.
0

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

Posez votre question
PsYKrO Messages postés 53 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 3 mai 2005
4 août 2004 à 15:54
Bon je vais essayé demain au boulot car la je suis sur un autre programme au boulot qui est a 99% d'être terminé.... je veux juste répondre a CanisLupus :

"Je suis OK avec crenaud76, il vaut mieux utiliser GetPrivateProfileString surtout si tu connais le nom des clés."

Comme j'ai ecrit, les noms des variables varient:

Ex:

Repertoire1
Disque1
Ours
.....

sinon j'aurai fait ce que tu m'a dit mais demain j'essayerai avec Nullchar ( je pesnai que c'etait pareil qu'un espace) et je pense très fortement que le problème devrait ce résoudre...

Merci à tout les deux...je vous tiens au courant
0
PsYKrO Messages postés 53 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 3 mai 2005
4 août 2004 à 15:56
mmmm quand je dit "varient" c'est à dire que je ne pas connaitre ni le nombre ni le nom...car un jour ca peut etre tel repertoire dans tel clé et un autre jour ca va etre peut etre un autre repertoire etc....

++
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
4 août 2004 à 16:33
Donc, mon tit bout de code devrait te convenir. Il est fait pour. Pas besoin de connaître le nombre ni le nom des clés.

Cordialement

CanisLupus
0
PsYKrO Messages postés 53 Date d'inscription lundi 19 juillet 2004 Statut Membre Dernière intervention 3 mai 2005
5 août 2004 à 13:07
Merci à tous les deux, j'ai essayé que le prog de CanisLupus et il marche merci bcp :)

J'essayerai cependant celui crenaud76

Merci :big)
0
Rejoignez-nous