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

Langage Delphi Discussion :

Quelle est mon erreur dans cette syntaxe


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Quelle est mon erreur dans cette syntaxe
    Bonjour à tous,

    J'utilise cette fonction :

    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
    function LectureFichierSteDat(Chemin : String) : String;
    Var
      F: TextFile;
    begin
      Try
        Try
          AssignFile(F,Chemin);
          //Lire la premiere ligne AssignFile(F,ExtractFilePath(Application.ExeName)+'test.txt');
          Reset(F); //Ouvre le fichier sans le modifier
          Readln(F,result);
          //Lit une ligne du fichier texte jusqu'au prochain saut de ligne
        Except
          On EInOutError do
          Begin
            Result := '< inconnu >';
            raise;
          end;
        end;
      Finally
        CloseFile(F); //Ferme l'association entre la variable F et le fichier texte
      end;
    end;
    Qui me retourne la première ligne d'un fichier.

    Mais si le fichier que j'envoi n'existe pas, j'ai un beau message I/O error, normal, mais je voudrais évité ce message, apparement le bloc Except ne joue pas son rôle ?

    Pouvez-vous m'expliquer ?

  2. #2
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2009
    Messages : 128
    Par défaut
    Bonjour,
    Si mes savoirs sont bons : si ton fichier n'existe pas, c'eat au Reset(F) que l'erreur devrait être générée.
    Il y a un moyen de le savoir en plaçant cette instruction hors génération d'erreur et en testant la variable IOResult...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {I-}
    Reset(F);
    {I+}
     
    If IOResult=0 then begin
    ....
    ....
    end
    else begin
       // traitement erreur e/s fichier non trouvé
    end;
    Mais c'est pas moderne comme démarche

  3. #3
    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
    Salut,

    Effectivement c'est au reset(F) que j'ai l'erreur, mais ta proposition ne change pas le probleme, j'ai toujours une erreur soulevée.

    Une autre solution ?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    C'est sur le Reset que la première exception est générée, mais une deuxième survient sur CloseFile puisque le fichier n'est pas ouvert. C'est celle-là que tu vois .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Var
      F: TextFile;
    begin
      AssignFile(F,Chemin);
     
      try
        Reset(F);
        Readln(F,result);
        CloseFile(F);
      except
        Result := '< inconnu >';
      end;
    end;

  5. #5
    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
    Citation Envoyé par Andnotor Voir le message
    C'est sur le Reset que la première exception est générée, mais une deuxième survient sur CloseFile puisque le fichier n'est pas ouvert. C'est celle-là que tu vois .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Var
      F: TextFile;
    begin
      AssignFile(F,Chemin);
     
      try
        Reset(F);
        Readln(F,result);
        CloseFile(F);
      except
        Result := '< inconnu >';
      end;
    end;

    Salut AndNotOr,

    Je viens de tester ta proposition, elle me génère toujours l'erreur et ne me retourne pas le result du except.

    Que dois-je faire ?

  6. #6
    Membre chevronné Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 343
    Par défaut Fonction FileExists
    Teste l'existance du fichier !

    essaie quelque chose comme :

    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
    AssignFile(AFile, f);
    FileMode := fmOpenRead;
    If FileExists(f) then 
    begin
       // ouverture
       Reset(AFile);
     
       // traitement du fichier
       // en général avec un 
       While not Eof(AFile) do 
         begin
         Read(AFile, ARecord);
         ...
         end; 
     
        ...
     
       // puis fermeture
       CloseFile(f);
    end;

  7. #7
    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
    Salut,

    Archonte : Effectivement en contournant le probleme par un test de présence du fichier j'évite une error 103 ou 104. Je te remercie.

    Je voulais éviter de passer par ce test, pour comprendre mieux mon problemes. Mes apparement apres plusieurs test différent je ne peux y échaper.

    Voil ma procédure finale (j'ai un peu modifié) :

    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
    function LectureFichierSteDat(Chemin : String; Ligne: Integer) : String;
    Var
      F: TextFile;
      i: Integer;
    begin
      if FileExists(Chemin) then
      Begin
        Try
          AssignFile(F,Chemin);
          Try
            //Lire la premiere ligne AssignFile(F,ExtractFilePath(Application.ExeName)+'test.txt');
            Reset(F); //Ouvre le fichier sans le modifier
            For i:=0 to Ligne do
              Readln(F,result) //Lit une ligne du fichier texte jusqu'au prochain saut de ligne
          Except
            Result := '< inconnu >';
          end;
        Finally
          CloseFile(F); //Ferme l'association entre la variable F et le fichier texte
        end;
      end
      Else Result := '< inconnu >';
    end;

    Merci à vous tous.


  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 16
    Par défaut pourquoi <> sous Vista
    J'interviens car subitement le message d'Andnotor m'affole : qu'est-ce qui va se produire sous Vista?
    Merci de la réponse

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Sous Vista le contrôle utilisateur sur les droits d'accès est beaucoup plus sévère (pour ne pas dire ch**** ). De fait même en administrateur de la machine certains répertoires jugés sensibles (typiquement Program Files) ne sont pas accessibles en écriture et nécessite une "élévation" des privilèges pour que cela fonctionne.

    Un exécutable lancé sans élévations de privilèges et qui essayes dans un répertoire sensible plantera inéluctablement faute de droit d'accès.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    Ajoute un FileMode := 0 après AssignFile pour être en lecture seule.

    ps: Ce CloseFile n'est toujours pas à la bonne place .

  11. #11
    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
    Citation Envoyé par Andnotor Voir le message
    Ajoute un FileMode := 0 après AssignFile pour être en lecture seule.

    ps: Ce CloseFile n'est toujours pas à la bonne place .
    Sa c'est pas bête !!!


  12. #12
    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
    Et comme cela c'est mieux ?

    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 LectureFichierSteDat(Chemin : String; Ligne: Integer) : String;
    Var
      F: TextFile;
      i: Integer;
    begin
      if FileExists(Chemin) then
      Begin
        AssignFile(F,Chemin);
        FileMode := 0;
        Try
          Try
            //Lire la premiere ligne AssignFile(F,ExtractFilePath(Application.ExeName)+'test.txt');
            Reset(F); //Ouvre le fichier sans le modifier
            For i:=0 to Ligne do
              Readln(F,result) //Lit une ligne du fichier texte jusqu'au prochain saut de ligne
          Except
            Result := '< inconnu >';
          end;
        Finally
          if Assigned(F) then CloseFile(F); //Ferme l'association entre la variable F et le fichier texte
        end;
      end
      Else Result := '< inconnu >';
    end;

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

Discussions similaires

  1. Où est mon erreur dans la boucle Do-While ?
    Par Novice72 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 21/06/2015, 20h28
  2. Débutant, quelle est mon erreur ?
    Par vladimire dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 15/05/2009, 23h43
  3. [STR912 ARM9] Quelle est l'erreur dans mon prog. ASM ?
    Par maczdecarpate dans le forum Autres architectures
    Réponses: 3
    Dernier message: 05/08/2007, 02h27
  4. ou est l'erreur dans cette syntaxe svp ?
    Par delavega dans le forum ASP
    Réponses: 2
    Dernier message: 29/05/2007, 13h03
  5. Réponses: 5
    Dernier message: 14/05/2006, 22h41

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