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 :

[Fichier INI] et disposition Try


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut [Fichier INI] et disposition Try
    Bonjour

    Disposition de "TRY" qui me pose question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.btnTestINIClick(Sender: TObject);
    Var
      FileIni: TIniFile;
    begin
      TRY // Try au dessus
        FileIni := TIniFile.Create('C:\Temp\Test.ini');
    //TRY // try au dessous
        Memo1.Lines.Add('Lecture des valeurs des Section dans la liste valeur');
        FileIni.ReadSectionValues('Section Chaine', Memo1.Lines);
      FINALLY
        FileIni.Free ;  // <== [Avertissement] La variable 'FileIni' n'est peut-être pas initialisée
      END;
    end;
    J'avais pris l'habitude de placer les TRY au dessous du "TIniFile.Create..." pour l'absence d'avertissement...

    Or je note bien dans les codes de références ; le TRY se situe au desssus du "TIniFile.Create..."

    Oui mais c'est qu'intervient le message d'avertissement du compilo suivant :
    [Avertissement] La variable 'FileIni' n'est peut-être pas initialisée
    Alors si le TRY doit se disposer au dessus, pourquoi cet avertissement ?

    Merci de votre éclairage

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Salut Droïde Système7,

    Pour ma part, je mets toujours le try après mon Create ...
    D'ailleurs, c'est ce qui ressort le plus souvent (du moins dans ce que j'ai pu lire jusque maintenant)

  3. #3
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Salut ero

    Ben voui moi idem depuis des années, tu me rassures un peu alors.

    Mais par exemple, regarde là, je ne citerais personne
    http://delphi.developpez.com/faq/?page=fichiersini

    @+

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Par défaut
    Je mers aussi le try en-dessous, mais cet exemple me fait réfléchir: si il y a un problème avec le nom de fichier passé en paramètre, avec le try en dessous ça va poser problème !?
    Il faut peut-être un double try ici... (un try...except pour le cas où le create échoue ?)

  5. #5
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par GoustiFruit Voir le message
    Je mers aussi le try en-dessous, mais cet exemple me fait réfléchir: si il y a un problème avec le nom de fichier passé en paramètre, avec le try en dessous ça va poser problème !?
    Il faut peut-être un double try ici... (un try...except pour le cas où le create échoue ?)
    non il suffirait d'initialiser FileIni à nil avant le TRY comme ça le Free ne poserait pas de problème mais je pense que c'est une erreur dans l'exemple, le TRY devrait être après le Create car avant cela le Free n'a aucun intérêt.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Bonsoir,

    Moi aussi je le mets au dessus, voilà ce que j'utilise principalement :

    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
    function LirePositionFenetre(Fenetre: TForm; NomFichier: String): Boolean;
    Var
      Fichier_Ini : Tinifile;
    Begin
      Fichier_Ini := nil;
      Result := False;
      // On créer ou on lit le fichier
      Try
        Fichier_Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + NomFichier);
        if Fichier_Ini.SectionExists(Fenetre.Name) then
        begin
        // On récupère les données si il y en à
         // ...
         // ...
     
         // si la fenêtre n'ai pas taillable Height, Width reste inchangé (sauf si on touche directement le ini
        // ...
        // ...
          Result := True;
        end;
      Finally
        if assigned(Fichier_Ini) then Fichier_Ini.Free;
      end;
    end;
    Sa me rassure de vous lire...

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 934
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 934
    Par défaut
    Je fais les deux, mais systématiquement en dessous si précédé d'une condition. Cela évite un Begin End supplémentaire .

    Dans le cas présent et à mon avis, le try finally ne sert à rien !
    Dans ces quelques lignes, la seule chose qui puisse coincer serait que le fichier soit ouvert en exclusif par une autre application ou éventuellement un manque de droits.
    Placer avant et s'il y avait un problème, l'exception nous ferait immédiatement remonter. Si après, on exécute le Free sur un objet qui n'existe pas (donc inutile) ou qui est invalide (source de problèmes supplémentaires) avant de remonter l'erreur .

    Ce bloc devrait être remplacé par un try except (placé avant ). Autant gérer l'exception proprement et immédiatement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.btnTestINIClick(Sender: TObject);
    Var
      FileIni: TIniFile;
    begin
      try
        FileIni := TIniFile.Create('C:\Temp\Test.ini');
        Memo1.Lines.Add('Lecture des valeurs des Section dans la liste valeur');
        FileIni.ReadSectionValues('Section Chaine', Memo1.Lines);
        FileIni.Free;
      except
        on E:Exception
          Memo1.Lines.Add(E.Message);
      end;
    end;

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    non il suffirait d'initialiser FileIni à nil avant le TRY comme ça le Free ne poserait pas de problème mais je pense que c'est une erreur dans l'exemple, le TRY devrait être après le Create car avant cela le Free n'a aucun intérêt.
    Je ne comprends pas, là tu me dis NON et dans l'exemple tu dis OUI (à propos de l'utilisation du double try, un try...except et un try...finally imbriqués) !?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sauvegarde des attributs de texte en fichier ini
    Par Raylemon dans le forum Langage
    Réponses: 2
    Dernier message: 06/09/2003, 21h28
  2. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40
  3. Fichiers INI et TlistBox
    Par Philippe01 dans le forum Langage
    Réponses: 3
    Dernier message: 11/06/2003, 15h36
  4. [VB6] Api pour supprimer dans un fichier INI
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 20/02/2003, 08h16
  5. faire un fichier .ini
    Par florent dans le forum C++Builder
    Réponses: 14
    Dernier message: 31/05/2002, 22h06

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