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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
OuPath:=FicIniIn.ReadString(C_SectionName_ProgConstentes,'Domaine','00');
Ou la lgine

Code : Sélectionner tout - Visualiser dans une fenêtre à part
OuPath:=FicIniIn.ReadString(C_SectionName_ProgConstentes,'DefaultPassword','00');
fonctionne parfaitement par contre la ligne

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.