Problème de lecture sur fichier ini.

Problème de lecture sur fichier ini. - Delphi/Pascal - Programmation

Marsh Posté le 28-07-2006 à 13:41:34    

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 :
  1. ;------------------------------------------------------------------------
  2. ; Constante divers du programme
  3. ;------------------------------------------------------------------------
  4. [Consente du programme]
  5. ;Nom du domaine conserné
  6. Domaine=cpln.ch
  7. ;Flag d'activation des mot de passe complexe
  8. ;True = Date de naissance comme password False = DefaultPassword
  9. ActiveComplexPassword=True
  10. DefaultPassword=Cpln2007
  11. ;------------------------------------------------------------------------
  12. ;------------------------------------------------------------------------
  13. ;Mapping ecole <-> Stokage des compte utilisateur
  14. ;------------------------------------------------------------------------
  15. [Mapage Ecole <-> Ou de stockage dans AD]
  16. et=OU=ept,OU=eleves_sans_droits,OU=eleves,OU=cpln_users
  17. est=OU=est,OU=etudes_superieures,Ou=eleves,Ou=cpln_users
  18. eam=OU=eam,OU=eleves_sans_droits,Ou=eleves,Ou=cpln_users
  19. esnig=OU=esnig,Ou=etudes_superieures,Ou=eleves,Ou=cpln_users
  20. default=Ecole Invalide
  21. ;------------------------------------------------------------------------


 
Ensuite j'ai les constantes suivantes :
 

Code :
  1. //Constante du programme
  2. Const C_SectionName_ProgConstentes='Constente du programme';
  3. //------------------------------------------------------------------------------
  4. //Paramètre du mode debug du programme
  5. Const C_SectionName_Debug_Information='Configuration du mode debug';
  6. //------------------------------------------------------------------------------
  7. //Mappage entre le nom de l'école et ou seront stocker ses utilisateur dans
  8. //Active directory
  9. Const C_SectionName_UserOuPath='Mapage Ecole <-> Ou de stockage dans AD';
  10. //------------------------------------------------------------------------------


 
 
Lorsque je veux faire des lectures uniquement tous va bien.
 
Hier j'ai rajouté la section suivante.
 

Code :
  1. [Configuration du mode debug]
  2. Debug_EcoleSharePath=\\Dip06Server\Debug\
  3. ;Stokag des utilisateur dans l'ou
  4. Debug_Classe_AD_ElevesPath=OU=debug,OU=eleves,OU=cpln_users
  5. ;groupe global
  6. Classe_AD_GlobalGroupPath=OU=debug,OU=classes,OU=eleves,OU=cpln_users
  7. ;groupe locaux pour le commun
  8. Classe_AD_LocalGroupPath=OU=groupes_debug,OU=groupes_locaux_domaine
  9. ;--------------------------------------------------------


 
Et les constantes

Code :
  1. //Partage correspondant à l'école
  2. Const C_Debug_Balise_Classe_EcoleSharePath='Debug_EcoleSharePath';
  3. //Chemin ou stoker le groupe global d'une classe dans Active directory
  4. Const C_Debug_Balise_Classe_GlobalGroupPath='Debug_Classe_AD_GlobalGroupPath';
  5. //chemin ou stoker le groupe local d'une classe dans active dirextory
  6. Const C_Debug_Balise_Classe_LocalGroupPath='Debug_Classe_AD_LocalGroupPath';
  7. //chemin ou son stoker les élèves en fonction de leur écoles dans active directory
  8. Const C_Debug_Balise_EcoleUserAdPath='Debug_Classe_AD_ElevesPath';
  9. //Paramètre du mode debug du programme
  10. Const C_SectionName_Debug_Information='Configuration du mode debug';

Mon code pour y accéder et le suivant
 

Code :
  1. procedure BuildAndAdd_Debug_Balise(Element:TNodeData);
  2. var
  3.   //fichier ini
  4.   FicIniIn:TMemIniFile;
  5.   //chemain au travers des OU
  6.   OuPath:String;
  7. begin
  8.   //----------------------------------------------------------------------------
  9.   //Balise  Classe_AD_GlobalGroupPath
  10.   //ouvre le fichier Ini
  11.   FicIniIn:=TMemIniFile.Create(Element.IniFile);
  12.   //extrais le chemin dans les ou du groupe global
  13.   OuPath:=FicIniIn.ReadString(C_SectionName_Debug_Information,C_Debug_Balise_Classe_GlobalGroupPath,'00');
  14.   //si pas trouvé
  15.   if OuPath = '00' then
  16.   begin
  17.     //génère une erreur
  18.     raise EU_BuildBaliseFunction_UnfindIniSectionOrRecord.Create
  19.     ('Section ['+C_SectionName_Debug_Information+'] du fichier Ini'+
  20.     ' introuvable ou champ "'+C_Debug_Balise_Classe_GlobalGroupPath+'"non définit');
  21.     //quitte la fonction
  22.     Exit;
  23.   end;
  24.   // Ect…….. Pour les autre section
  25.   //fermeture fichier ini
  26.   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 :
  1. 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 :
  1. OuPath:=FicIniIn.ReadString(C_SectionName_ProgConstentes,'Domaine','00');


Ou la lgine
 

Code :
  1. OuPath:=FicIniIn.ReadString(C_SectionName_ProgConstentes,'DefaultPassword','00');


 
fonctionne parfaitement par contre la ligne
 

Code :
  1. 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 :
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   FicIniIn:TMemIniFile;
  4.   //tampon de chaines
  5.   Str:TStringList;
  6.   //tampon pour une chaine
  7.   StrValue:String;
  8. begin
  9.   //creation du tempon de chaine   
  10.   Str:=TStringList.Create;
  11.   //ouverture du fichier ini et chargement en mémoire
  12.   FicIniIn:=TMemIniFile.Create('conf.ini');
  13.   //lectures de la section
  14.   FicIniIn.ReadSectionValues('Configuration du mode debug',Str);
  15.   ListBox1.Items:=Str;
  16.   //charge une clé  
  17.   StrValue:=FicIniIn.ReadString('Configuration du mode debug','Debug_EcoleSharePath','00');
  18.   Str.Add(StrValue);
  19.   //ajoute le tampon de chaine à la listbox
  20.   ListBox1.Items:=Str;
  21.   Str.free;
  22.   FicIniIn.free;
  23. 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 :
  1. 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
Reply

Marsh Posté le 28-07-2006 à 13:41:34   

Reply

Marsh Posté le 28-07-2006 à 13:47:10    

Tu sais qu'il y a des primitives windows pour lire les fichiers ini ?

Reply

Marsh Posté le 28-07-2006 à 13:51:28    

Non mais je n'ai jamais été contre des compléments d'information par contre alors c'est bien volontiers que j'accepterai une description. Si cela ne te dérange pas bien sure.


---------------
Braoru
Reply

Marsh Posté le 28-07-2006 à 13:53:58    

Reply

Marsh Posté le 28-07-2006 à 13:56:58    

Si par la tu voulais savoir si j'avais inclus correctement les bon uses j'ai bien inclus IniFiles.
J'ais fais le choix de TMemIniFile care fait beaucoup de lecture mais jamais d'écriture sur mon fichier ini.


---------------
Braoru
Reply

Marsh Posté le 28-07-2006 à 15:31:54    

Problème résolut après 3 jours.
 
J'avais renommé le répertoire de mon groupe de projet  Back_25_07_06_CCI. Et copier son contenu dans un nouveau répertoire CCI.
 
Enfaite mon application travail avec ca racine comme source de son arborescence de fichier. L'application utilisait les fichiers qui ce trouvait dans le répertoire de backup et non dans le nouveau répertoire de travail. Il semblerai qu'il n'aille pris en compte le changement de répertoire mais pas de la bonne manière.
 
3 claques pour moi.
 
Je travail sur partage windows sur ma machine. Tous les 4 jours mon server ouvre et sauvegarde tous ce qui commence par Back_ . Donc je vais changer ma méthode car renommer le répertoire puis copier ne semble pas être une bonne solution pour Delphi.


---------------
Braoru
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed