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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| ;------------------------------------------------------------------------
; 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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
//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.
1 2 3 4 5 6 7 8 9
| [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
1 2 3 4 5 6 7 8 9 10 11 12 13
|
//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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
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
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
1 2
|
OuPath:=FicIniIn.ReadString(C_SectionName_ProgConstentes,'Domaine','00'); |
Ou la lgine
OuPath:=FicIniIn.ReadString(C_SectionName_ProgConstentes,'DefaultPassword','00');
fonctionne parfaitement par contre la ligne
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| 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
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.
Partager