Comment recupere t on dans un fichier ini le chemin d'un repertoire [Résolu]

Messages postés
53
Date d'inscription
lundi 19 juillet 2004
Dernière intervention
3 mai 2005
- - Dernière réponse : PsYKrO
Messages postés
53
Date d'inscription
lundi 19 juillet 2004
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)
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
3
Merci
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

Dire « Merci » 3

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

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
3
Merci
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

Dire « Merci » 3

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

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Dernière intervention
9 juin 2006
0
Merci
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.
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Dernière intervention
9 juin 2006
0
Merci
Excuses-moi ! Il faut déclarer Ret en Long, pas en String

Christophe R.
Messages postés
53
Date d'inscription
lundi 19 juillet 2004
Dernière intervention
3 mai 2005
0
Merci
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
Messages postés
53
Date d'inscription
lundi 19 juillet 2004
Dernière intervention
3 mai 2005
0
Merci
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....

++
Messages postés
3758
Date d'inscription
mardi 23 septembre 2003
Dernière intervention
13 mars 2006
0
Merci
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
Messages postés
53
Date d'inscription
lundi 19 juillet 2004
Dernière intervention
3 mai 2005
0
Merci
Merci à tous les deux, j'ai essayé que le prog de CanisLupus et il marche merci bcp :)

J'essayerai cependant celui crenaud76

Merci :big)

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.