IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Problème de lecture sur fichier ini.


Sujet :

Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Problème de lecture sur fichier ini.
    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.

  2. #2
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    désolé mais ta question est vraiment trop longue à relire :/
    essaye de synthétiser et de poser ton problèmen en 20 maximum. j'ai vite jeté un coup d'oeil, tu semble utiliser la bonne méthode, alors vérifie le contenu de tes variables et constantes :les tirest, les 's', enfin tous les caractères facilement oublié.
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 7
    Points : 3
    Points
    3
    Par défaut mercis
    Mercis de la réponse mais c'est bon. Sa ne venais en rien de mes méthode d'accès au fichier ini honte à moi pour avoirs cherché dans la mauvaise direction.

    //--
    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.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/11/2008, 02h05
  2. Réponses: 13
    Dernier message: 06/11/2008, 09h30
  3. [POI] Problème de lecture des fichiers Word
    Par Dari dans le forum Documents
    Réponses: 9
    Dernier message: 05/07/2007, 14h08
  4. problème dans boucle for de lecture de fichier ini
    Par chourmo dans le forum Delphi
    Réponses: 3
    Dernier message: 06/07/2006, 09h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo