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

Composants VCL Delphi Discussion :

Violation d'accès TOpenTextFileDialog


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 497
    Par défaut Violation d'accès TOpenTextFileDialog
    Bonjour,

    j'ai un souci lors de la fermeture d'un "TOpenTextFileDialog", (Violation d'accès)

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var List: TStringList;
    ...
    if OpenTextFileDialog.Execute then
     begin
        try
          List := TStringList.Create;
          List.LoadFromFile(OpenTextFileDialog.FileName);
          StatusBar.Panels[1].Text := ExtractFileName(OpenTextFileDialog.FileName);
        except {Si Erreur}
           List.Free;
        end;
     end;
    En mode création : Pas de violation d'accès lors de la fermeture du "TOpenTextFileDialog", auriez-vous une explication ?

    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
    var List: TStringList;
    OpenTextFileDialog: TOpenTextFileDialog;
    ...
    OpenTextFileDialog := TOpenTextFileDialog.Create(nil);
    with OpenTextFileDialog do
     begin
       Execute();
        try
          List := TStringList.Create;
          List.LoadFromFile(FileName);
          StatusBar.Panels[1].Text := ExtractFileName(FileName);
          Free;
        except {Si Erreur}
           List.Free;
           Free;
        end;
      end;

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 604
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    ma première réaction :plutôt qu'un try except il faudrait utiliser un try finally
    ma deuxième : je ne vois pas à quoi sert le code si List est détruit juste après son chargement , il doit manquer un traitement

  3. #3
    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
    Citation Envoyé par SergioMaster Voir le message
    ma deuxième : je ne vois pas à quoi sert le code si List est détruit juste après son chargement , il doit manquer un traitement
    C'est plutôt l'inverse, la liste n'est jamais détruite à part en cas d'exception

    Dans le premier exemple, si list ne peut être créé (manque de ressources), list.free génère une nouvelle exception. C'est le seul problème qui puisse se poser.
    Il peut y avoir le même problème dans le deuxième cas mais en plus puisque le retour d'Execute n'est pas testé, LoadFromFile peut échouer si le fichier n'existe pas ou est verrouillé.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 604
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    C'est plutôt l'inverse, la liste n'est jamais détruite à part en cas d'exception
    Exact mais je pensais déjà : après correction de except en finally
    N.B. je n'avais pas vu le 2°code écrit après la rédaction de mon message

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Pourquoi un coup if OpenTextFileDialog.Execute then qui est la bonne façon de faire et un autre Execute(); qui n'est pas la bonne façon ?
    Pourquoi un with et pas l'autre ... curieux de construire ses codes façon aussi différente

    Bon, c'est semble-t-il résolu mais on ne sait pas trop pourquoi ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre chevronné
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Billets dans le blog
    4
    Par défaut je l'écrirai comme ça.
    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
     
    List := TStringList.Create;
    OpenTextFileDialog := TOpenTextFileDialog.Create(nil);
    try
      with OpenTextFileDialog.Execute do
      try
        List.LoadFromFile(FileName);
        StatusBar.Panels[1].Text := ExtractFileName(FileName);
      except {Si Erreur}
        On E:Exception do
        begin
          // le message d'erreur est e.message
        end;
      end;
    Finally  //quoi qu'il arrive
      OpenTextFileDialog.free;
      List.Free;
      Free;// free de quoi, vérifier si c'est bien le bon endroit pour la libération
    End;
    Crldt

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

Discussions similaires

  1. ReportPrinterDialog (QR2) : violation d'accès..
    Par Harry dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/12/2004, 14h04
  2. [XMLDocument] Violation d'accès
    Par xant dans le forum Composants VCL
    Réponses: 8
    Dernier message: 29/09/2004, 15h39
  3. requete / violation d'accès
    Par marie253 dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/08/2004, 13h29
  4. Violation d'acces apres Execute
    Par SegmentationFault dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 10/08/2004, 16h23
  5. Violation d'accès apres Close
    Par SegmentationFault dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/07/2004, 16h46

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