Tout d'abord bonjours.
Alors voila j'ai un problème assez lourd avec une lecture de fichier ini.
Je développe temporaire sur un autre pc que mon poste habituel et je rencontre un problème étrange.
J'ai un fichier ini dont je vous donne un extrait (J'ai aussi recréer le bug avec ce raccourcit de fichier ini)
Conf.ini
Code :
- ;------------------------------------------------------------------------
- ; Constante divers du programme
- ;------------------------------------------------------------------------
- [Consente du programme]
- ;Nom du domaine conserné
- Domaine=cpln.ch
- ;Flag d'activation des mot de passe complexe
- ;True = Date de naissance comme password False = DefaultPassword
- ActiveComplexPassword=True
- DefaultPassword=Cpln2007
- ;------------------------------------------------------------------------
- ;------------------------------------------------------------------------
- ;Mapping ecole <-> Stokage des compte utilisateur
- ;------------------------------------------------------------------------
- [Mapage Ecole <-> Ou de stockage dans AD]
- et=OU=ept,OU=eleves_sans_droits,OU=eleves,OU=cpln_users
- est=OU=est,OU=etudes_superieures,Ou=eleves,Ou=cpln_users
- eam=OU=eam,OU=eleves_sans_droits,Ou=eleves,Ou=cpln_users
- esnig=OU=esnig,Ou=etudes_superieures,Ou=eleves,Ou=cpln_users
- default=Ecole Invalide
- ;------------------------------------------------------------------------
|
Ensuite j'ai les constantes suivantes :
Code :
- //Constante du programme
- Const C_SectionName_ProgConstentes='Constente du programme';
- //------------------------------------------------------------------------------
- //Paramètre du mode debug du programme
- Const C_SectionName_Debug_Information='Configuration du mode debug';
- //------------------------------------------------------------------------------
- //Mappage entre le nom de l'école et ou seront stocker ses utilisateur dans
- //Active directory
- Const C_SectionName_UserOuPath='Mapage Ecole <-> Ou de stockage dans AD';
- //------------------------------------------------------------------------------
|
Lorsque je veux faire des lectures uniquement tous va bien.
Hier j'ai rajouté la section suivante.
Code :
- [Configuration du mode debug]
- Debug_EcoleSharePath=\\Dip06Server\Debug\
- ;Stokag des utilisateur dans l'ou
- Debug_Classe_AD_ElevesPath=OU=debug,OU=eleves,OU=cpln_users
- ;groupe global
- Classe_AD_GlobalGroupPath=OU=debug,OU=classes,OU=eleves,OU=cpln_users
- ;groupe locaux pour le commun
- Classe_AD_LocalGroupPath=OU=groupes_debug,OU=groupes_locaux_domaine
- ;--------------------------------------------------------
|
Et les constantes
Code :
- //Partage correspondant à l'école
- Const C_Debug_Balise_Classe_EcoleSharePath='Debug_EcoleSharePath';
- //Chemin ou stoker le groupe global d'une classe dans Active directory
- Const C_Debug_Balise_Classe_GlobalGroupPath='Debug_Classe_AD_GlobalGroupPath';
- //chemin ou stoker le groupe local d'une classe dans active dirextory
- Const C_Debug_Balise_Classe_LocalGroupPath='Debug_Classe_AD_LocalGroupPath';
- //chemin ou son stoker les élèves en fonction de leur écoles dans active directory
- Const C_Debug_Balise_EcoleUserAdPath='Debug_Classe_AD_ElevesPath';
- //Paramètre du mode debug du programme
- Const C_SectionName_Debug_Information='Configuration du mode debug';
|
Mon code pour y accéder et le suivant
Code :
- procedure BuildAndAdd_Debug_Balise(Element:TNodeData);
- var
- //fichier ini
- FicIniIn:TMemIniFile;
- //chemain au travers des OU
- OuPath:String;
- begin
- //----------------------------------------------------------------------------
- //Balise Classe_AD_GlobalGroupPath
- //ouvre le fichier Ini
- FicIniIn:=TMemIniFile.Create(Element.IniFile);
- //extrais le chemin dans les ou du groupe global
- OuPath:=FicIniIn.ReadString(C_SectionName_Debug_Information,C_Debug_Balise_Classe_GlobalGroupPath,'00');
- //si pas trouvé
- if OuPath = '00' then
- begin
- //génère une erreur
- raise EU_BuildBaliseFunction_UnfindIniSectionOrRecord.Create
- ('Section ['+C_SectionName_Debug_Information+'] du fichier Ini'+
- ' introuvable ou champ "'+C_Debug_Balise_Classe_GlobalGroupPath+'"non définit');
- //quitte la fonction
- Exit;
- end;
- // Ect
.. Pour les autre section
- //fermeture fichier ini
- FicIniIn.Free;
|
Note :
Element.IniFile contient 'conf.ini' à ce moment de l'exécution (vu sur le debugger)
Vous l'aurez deviner mon code ne fonctionne pas (la lécture retourne '00')
J'ais tenté de remplacé la lecture par
Code :
- OuPath:=FicIniIn.ReadString('Configuration du mode debug','Debug_EcoleSharePath','00');
|
Ca ne fonctionne pas non plus
J'ais aussi fait des essais sur les autre section (Dans cette partie du code) cela fonctionne correctement
Mais par exemple si dans les constante du programme [Consente du programme]
je rajoute une entrée
Ex :
Test=essai1
La ligne de code
Code :
- OuPath:=FicIniIn.ReadString(C_SectionName_ProgConstentes,'Domaine','00');
|
Ou la lgine
Code :
- OuPath:=FicIniIn.ReadString(C_SectionName_ProgConstentes,'DefaultPassword','00');
|
fonctionne parfaitement par contre la ligne
Code :
- OuPath:=FicIniIn.ReadString(C_SectionName_ProgConstentes,'Test','00');
|
Quand à elle retourne aussi '00'
Par contre si je crée un autre projet ou je place le code suivant
Code :
- procedure TForm1.Button1Click(Sender: TObject);
- var
- FicIniIn:TMemIniFile;
- //tampon de chaines
- Str:TStringList;
- //tampon pour une chaine
- StrValue:String;
- begin
- //creation du tempon de chaine
- Str:=TStringList.Create;
- //ouverture du fichier ini et chargement en mémoire
- FicIniIn:=TMemIniFile.Create('conf.ini');
- //lectures de la section
- FicIniIn.ReadSectionValues('Configuration du mode debug',Str);
- ListBox1.Items:=Str;
- //charge une clé
- StrValue:=FicIniIn.ReadString('Configuration du mode debug','Debug_EcoleSharePath','00');
- Str.Add(StrValue);
- //ajoute le tampon de chaine à la listbox
- ListBox1.Items:=Str;
- Str.free;
- FicIniIn.free;
- end;
|
Ici la lecture ce passe sans encontre.
J'ais essayer de reprendre ce fichier de configuration et d'ouvrir le fichier ini avec
Code :
- FicIniIn:=TMemIniFile.Create('conf.ini');
|
Dans le programme principale rien a faire il continue de lire et de retourner des '00''
Alor la je vois pas surtouts que dans mon programme toute les autre lectures dans d'autres procédures fonctionne parfaitement (je travail avec 15 sections) sauf pour cette section ou toute autre chose que j'écris (via notepade) sur ce pc dans d'autre section. Mais ces même ajout dans le fichier son parfaitement lisible dans un autre projet par contre (Comme le projet de test).
J'ai essayer de refaire un projet complet mais le problème étais le même au bout du compte.
Alors si des personnes avec une idée cela serai véritablement sympathique.
Note à moi-même :
Les noms de section dans un fichier ini sont en majuscule et je doit le changer je me rend compte la maintenant.
No comment
---------------
Braoru