LIRE ET ECRIRE DANS UN FICHIER .INI

Idris - 23 févr. 2001 à 00:33
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 18 juin 2009 à 06:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32-lire-et-ecrire-dans-un-fichier-ini

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 juin 2009 à 06:36
OK,

Alors déjà, le code proposé par Imrahjel est du .Net plus que bancal (Strings.Left, Dir ?????)

Ajoutons a cela des déclarations d'APIs non adaptées à .Net, et vous aurez toutes les peines du monde a faire tourner ce code convenablement.
chasseurdedemon Messages postés 60 Date d'inscription mardi 23 décembre 2003 Statut Membre Dernière intervention 15 novembre 2010
17 juin 2009 à 18:49
bonjour,
merci pour le code, j'utilise vb.net
j'ai une erreur ici : LireINI = Strings.Left$(l_szRetour, l_lRetour)
l'erreur est sur l_lRetour , il me dit que Option Strict On interdit les convertions implicites de 'long' en 'integer'

quelqu'un à une solution ?

je début en vb.net

merci
themuton Messages postés 3 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 10 février 2009
10 févr. 2009 à 18:04
Merci Imrahjel pour ton code VB.NET,
J'utilise VB.NET 2003, mais ça foire, ma variable l_lRetour prend une valeur énorme : 2251799813685264
ce qui me donne une exception :

System.OverflowException: Arithmetic operation resulted in an overflow.

à la ligne suivante : LireINI = Left$(l_szRetour, l_lRetour)

Auriez-vous une solution ??
Merci d'avance !
Minihisht Messages postés 6 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 23 septembre 2008
19 sept. 2008 à 13:19
Merci pour le code, il est simple et clair.
jon51 Messages postés 35 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 31 juillet 2008
28 juil. 2008 à 13:58
bonjour à tous et merci pour ce code.
j'ai un petit problème avec le dernier post.
vous avez dit de remplacer

LireINI Left$(l_szRetour, l_lRetour) par LireINI Strings.Left$(l_szRetour, l_lRetour)

mais il me met l'avertissement suivant:
il me met qu'une eception de reference null peut se produire au moment de l'execution.

auriez vous une idée
merci
jon51
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 mars 2008 à 09:16
mets Strings.Left$
kazylax33 Messages postés 1 Date d'inscription lundi 2 juillet 2007 Statut Membre Dernière intervention 12 mars 2008
12 mars 2008 à 23:42
Bonjour

chez moi ca me dit

Erreur 2 'Public Property Left() As Integer' n'a aucun paramètre et son type de retour ne peut pas être indexé.

ca bug ici
LireINI = Left$(l_szRetour, l_lRetour)

avec le Left$

savez vous comment faire ?
Merci
quentincabo Messages postés 34 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 26 mars 2008
25 févr. 2008 à 15:01
Merci à Nix et lmrahjel pour ce bout de code bien pratique.
lurked Messages postés 3 Date d'inscription mardi 9 mai 2006 Statut Membre Dernière intervention 8 janvier 2008
8 janv. 2008 à 17:35
Bonne source, simple et fiable.

Merci à Imrahjel pour la convertion en .NET.
zoubi57 Messages postés 10 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 17 octobre 2019
10 août 2007 à 20:51
Pas mal...
Pour ceux qui cherche encore comment supprimer une clé du fichier, il suffit d'écrire cette clé avec une valeur nulle.
N.B. Les fichier n'ont pas besoin d'être en . INI. Ça marche aussi avec les .TXT, .REG, etc...

Private Declare Function WritePrivateProfileString _ Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpString As Any, _
ByVal lpFileName As String) _
As Long

' Fonction à ajouter :
Sub DetruitVariableINI( _
Entete As String, _
Variable As String, _
Fichier as strig)

if WritePrivateProfileString _
(Entete, Variable, "", Fichier) = 0 then
MsgBox "Erreur lors de l'écriture"
End Function

private Fichier as string

' Pour l'executer ex :

Fichier = App.Path & "" & App.EXEName & ".txt"

'Ajouter Fichier dans la fonction d'origine EcrireINI
'et la tranformaer en sub avec un teste d'erreur
'WritePrivateProfileString retourne 0 si problème ecriture
EcrireINI("MonEntete", "MaVariable", "MaValeur",Fichier)

DetruitVariableINI "MonEntete", "MaVariable", Fichier
Vinsaille Messages postés 39 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 18 juin 2008
13 juin 2007 à 15:54
Bonjour, tres bon code merci à toi, j'ai cependant un probleme, je bosse sous visual studio 2005 pour faire une petite appli en me servant de windows forms. Impossible de déclarer la fonction GetPrivateProfileString, ca me met une erreur au niveau du mot " Declare " :

Erreur 1 Mot clé non valide en tant qu'identificateur.

Ma déclaration je la fait comme ci dessous :

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long


Merci de m'aider je bloque...
Vincent
diablamanshadow Messages postés 419 Date d'inscription lundi 30 août 2004 Statut Membre Dernière intervention 28 janvier 2008
15 août 2006 à 07:46
moi j'ai lu dans les com qu'on disais que pour lire une valeur (se qui est peut probable au vu que le bu d'un ini ses un fichier de config enfin moi perso fichier de config ses plusieur valeur ^^) il fallais pas les parenthese et quand on dois en lire plusieur comme le dit z980x la il faut mettre les parenthese :s

donc me demandais un peu ca si on pouvais plus me l'approfondir se serais sympa ^^

disons que j'ai deux entetes avec chacune 2 variables comme je fais pour lire la premiere variable de la premiere entete et mettre sa valeur dans text1 puis mettre la deuxieme valeur de la deuxieme variable de la premiere entete dans text2 puis premiere variable de la deuxieme entete text3 et pour la deuxieme valeur de la deuxiee variable de la deuxieme entete mettre en text4 siouplait ^^

car si je met a la suite 4 lireini bah je recup a la fin que la derniere valeur ou alors faut que je dise lireini puis premiere valeur premiere variable ensuite a la ligne stock sa dans text1 genre

dim E1V1 , E1V2, E2V1, E2V2 as string
E1V1 = LireINI "Entete1", "Variable1"
text1.text = E1V1
E1V2 = LireINI "Entete1", "Variable2"
text2.text = E1V1
E2V1 = LireINI "Entete2", "Variable1"
text3.text = E1V1
E2V2 = LireINI "Entete2", "Variable2"
text4.text = E1V1

il faudrais un truc du genre ?
ou y a t'il un moyen plus simple avec le system de parenthese ? ^^

merci d'avance
Diablaman
spycollege Messages postés 50 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 8 mars 2007
27 janv. 2006 à 12:23
génial !
10/10
Imrahjel Messages postés 6 Date d'inscription mercredi 16 mars 2005 Statut Membre Dernière intervention 6 janvier 2006
29 déc. 2005 à 11:51
Bonjour,
voici une adaptation pour vb.NET:
Copier entre les lignes d'etoiles et coller dans un module
Les appels aux fonctions se font en passant les variables entre parenthèses, séparées par des virgules.

'******** commencer à copier dessous
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Short, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Long

Function LireINI(ByVal pEntete As String, ByVal pVariable As String) As String
Dim l_szRetour As String
Dim l_lRetour As Long
Dim l_szFichier As String
l_szFichier = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf(""c)) & "\config.ini"
If Dir(l_szFichier) = "" Then
MsgBox("Fichier introuvable")
Else
l_szRetour = Space$(255)
l_lRetour = GetPrivateProfileString(pEntete, pVariable, "Error", l_szRetour, 255, l_szFichier)
LireINI = Left$(l_szRetour, l_lRetour)
End If
End Function

Function EcrireINI(ByVal pEntete As String, ByVal pVariable As String, ByVal pValeur As String) As Long
' la fonction retourne 0 (zéro) si elle échoue
' la fonction retourne autre chose si elle réussit
Dim l_szFichier As String
l_szFichier = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf(""c)) & "\config.ini"
EcrireINI = WritePrivateProfileString(pEntete, pVariable, pValeur, l_szFichier)
End Function
'******** arrêter de copier dessus

En espérant avoir aider ceux qui passent sous .NET
Bonne année à tous,
Imrahjel.
tariktarik Messages postés 12 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 26 juillet 2006
29 nov. 2005 à 10:19
jarive pas a lire le fchier svp si qlq un exmple comple
merci d'avance
ntm113 Messages postés 12 Date d'inscription dimanche 19 octobre 2003 Statut Membre Dernière intervention 20 juillet 2006
9 oct. 2005 à 17:59
Le prog n'est pas totalement propre :

Function EcrireINI(Entete As String, Variable As String, Valeur As String) As String
Fichier = App.Path & "" & App.EXEName & ".ini"
WriteINI = WritePrivateProfileString(Entete, Variable, Valeur, Fichier)
End Function

Le WriteINI il sert à rien et il vient de nulle part et çà n'a pas de sens de déclarer la fonction As String.

Je ne met qu'un 8/10 pour la peine !
cs_zekinan Messages postés 1 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 13 avril 2005
13 avril 2005 à 16:32
bonjour a tous,
je n'arrive pas a faire marché ce code. J'ai modifié le nom du fichier .ini mais rien à faire.
Dans le message que je renvoie, toujours vide !
au secours !

zékinan
dionysos6868 Messages postés 310 Date d'inscription jeudi 4 septembre 2003 Statut Membre Dernière intervention 9 juin 2005 1
4 janv. 2005 à 18:02
Merci pour le travail j'ai néantmoin une question.

Comment puis je savoir le nombre et le nom des varaible pour une entete ?????

Merci
Shendoo Messages postés 55 Date d'inscription vendredi 12 novembre 2004 Statut Membre Dernière intervention 1 juin 2007
1 janv. 2005 à 16:56
sa c'est good, bon travail a toi ;) clair net et précis, je dis Bravo clap clap clap ! :D
danielgrd Messages postés 47 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 22 juin 2005
30 oct. 2004 à 16:36
Hop! Et bien j'ai trouvé la réponse à ma question moi-même! Je n'ai que rejouté un On Error Goto ... et ca marche.

Mais je serais quand même curieux de savoir si il y aurait vraiment quelque chose à mettre à la place du 'RIEN' et qui ferait la même chose.

Donc, vous pouvez quand même essayer de répondre a la question...

MErci
danielgrd Messages postés 47 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 22 juin 2005
30 oct. 2004 à 16:32
J'ai une question:

Comment je pourrais faire cela: (EXEMPLE)

(SI LA VARIABLE N'EXISTE PAS, FAIRE UNE ACTION)

Il faudrait remplacer 'RIEN' par quoi????

--------------------------------------------------------------------------
If LireINI("Ligne Un Entete", "NomVariable") = 'RIEN' Then
MsgBox "1"
End If
--------------------------------------------------------------------------



Merci
vbkleugg Messages postés 7 Date d'inscription samedi 14 décembre 2002 Statut Membre Dernière intervention 4 août 2004
1 août 2004 à 13:16
10/10 ! C'est parfait, simple rapide et efficace, ce que je cherchais, merci ;op
cs_Snake77 Messages postés 3 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 12 novembre 2003
12 nov. 2003 à 00:39
Non j ai pas eu d erreur avec vb studio 6.
borton Messages postés 2 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 novembre 2003
11 nov. 2003 à 20:22
Moi ça me dit : compile error : fin d'instruction attendue
Quelqu'un a eu la même erreur??
Après avoir eu cette erreur, le cursor se place à cet endroit :

"Open Nom_Fichier For Binary Access Read As #1"
Ssybacorp Messages postés 3 Date d'inscription dimanche 21 avril 2002 Statut Membre Dernière intervention 5 octobre 2003
5 oct. 2003 à 21:03
Ben, je pense comme les autres le petit code extra simple:
qui sauve la vie en 2 minutes !
Merci
cs_Pestouille Messages postés 58 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 30 octobre 2008
19 juin 2003 à 16:13
Merci pour le code !!! 9/10
z980x Messages postés 897 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 26 juillet 2007 2
9 juin 2003 à 20:47
Excellent ! Mais comme dit youl46, il vaut mieux mettre:

EcrireINI "MonEntete", "MaVariable", "MaValeur"

Sauf quand tu veux LIRE que deux valeurs, il faut mettre les parentheses.

Sinon je met 10/10 !
cs_Snake77 Messages postés 3 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 12 novembre 2003
8 juin 2003 à 20:35
J' avou que ce code m' a bien servit quand j avais vb6 mais est ce que quelqu un sait comment l' adapter a vb.net??? merci d' avance
alexx860 Messages postés 22 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 2 janvier 2004
13 mai 2003 à 13:29
plus ! 15/10 et merci :)
bayhs Messages postés 6 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 8 octobre 2003
31 mars 2003 à 20:33
ça mérite 10/10

Merci !
jmongin Messages postés 13 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 7 juin 2003
23 mars 2003 à 14:35
Merci bcp !!
cs_Jin Messages postés 30 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 1 février 2003
5 janv. 2003 à 16:59
Franchement, çà pête.
C'est rapide, efficace et utile, et çà remplace 2 pages de mon code...
warreng69 Messages postés 12 Date d'inscription jeudi 21 novembre 2002 Statut Membre Dernière intervention 13 avril 2004
8 déc. 2002 à 19:22
svp est ce que kelk un possederai une source avec une fonction de lecture d'un fichier ini avec seulement le nom du fichier en parametres.
merci
et je souhaiterai egalement savoir comment le fichier ini peut etre lu (chargé) par une application.
cs_fly Messages postés 5 Date d'inscription samedi 7 septembre 2002 Statut Membre Dernière intervention 27 janvier 2004
7 sept. 2002 à 14:01
Bonjour,
Ch'suis nouveau sur ce site sympas.
Y'a déjà un pb, est ce que quelqu'un peut m'expliquer l'intérêt d'avoir le nom de la variable retourné par LireINI "MonEntete", "MaVariable" plutôt que sa valeur ?
Ce qui m'interesserais sera de pouvoir récupérer la valeur de cette variable après l'avoir écrite avec EcrireINI "MonEntete", "MaVariable", "MaValeur" ??
youl46 Messages postés 10 Date d'inscription jeudi 1 mars 2001 Statut Membre Dernière intervention 11 avril 2002
8 avril 2002 à 18:30
Ce n'est pas EcrireINI("MonEntete", "MaVariable", "MaValeur") mais EcrireINI "MonEntete", "MaVariable", "MaValeur"
Kholera Messages postés 27 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 10 octobre 2002
18 janv. 2002 à 15:24
Reponse pour muskafr88 : déclare une variable et affecte lui ce que te retourne la fonction, comme suit...

Dim strTemp as String
strTemp = LireINI("MonEntete", "MaVariable")

OU au Form_Load() de ton prog ou d'une page affecte le résultat directement à une textBox par exemple :

text1.text = LireINI("MonEntete", "MaVariable")

Voilà, amuse toi bien !
muskafr88 Messages postés 1 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 14 janvier 2002
14 janv. 2002 à 20:03
Salut

Quelqu'un peut me dire comment retourner le LireINI "Entete", "variable" dans une variable ?

J'ai essayer de plusieurs facons, sans jamais reussir, merci de me donner un petit exemple.

muskafr
Super sympa, dire que j'avais fait une cinquentaine de ligne pour faire le même chose....


Pour repondre un peu à ceux qui se posent les mêmes question que assassins:

Le fichier ini a le nom de l'executable et se trouve dans le repertoire de se dernier...
Pour choisir autre chose il suffit de changer se qu'il y a derriere fichier=

l'exemple ne fonctionne pas il faut mettre:
EcrireINI "MonEntete", "MaVariable", "MaValeur"
LireINI "MonEntete", "MaVariable"


Voila c'est un code genial, mais qui ne permet pas d'effacer les clefs... mais c'est pas grave...es ce vraiment utile ? suffit de mettre "" à la valeur si on en veux plus...

Un grand merci

Ephaystos
et sa me dit error attendu = ... :)
hé hmm on le met ou le fichier ini qu'on veut ecrire dessus ??
Est-ce-que je pourrais avoir un exemple plus concrêt de la méthode LireINI car j'ai besoin d'un fichier de config mais je n'arrive pas à recupérer la valeur des variables merci de me mailer
bigwarez2001.fr.st
15 mars 2001 à 18:30
etant tres nul en VB je narrive pas a mettre le truc entete .. enfin je voulais savoir comment sauver la config de mes textbox a mes chack mercide me mailer car je suis tres coincer
Idem, ma bien aider.tres simple, comme je l'es aime !!
Merci, ce code m'a sortit de la mouise.

Cool
Rejoignez-nous