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 :

Erreur incompréhensible à l'execution


Sujet :

Langage Delphi

  1. #1
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut Erreur incompréhensible à l'execution
    Bonjour
    Mon programme Delphi
    1) clique sur une appli qui crée un fichier
    2) attend que le fichier soit disponible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sleep(400);
    repeat until fileexists(...);
    2) lit, analyse et détruit le fichier
    en boucle
    Au bout d'un certain nombre de passages (parfois 15000) il se plante avec le message
    EFOpenError : impossible d'ouvrir le fichier.
    et en relançant, il affiche ensuite : fichier utilisé par un autre processus.
    J'ai même doublé la boucle fileexists par une autre avec findfirst,etc.
    Savez vous comment éviter celà et avoir un programme fiable, capable de tourner le temps voulu ?
    Merci de vos conseils
    PS Le câble réseau est débranché.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par Nebulix Voir le message
    Bonjour
    Mon programme Delphi
    1) clique sur une appli qui crée un fichier
    2) attend que le fichier soit disponible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sleep(400);
    repeat until fileexists(...);
    2) lit, analyse et détruit le fichier
    en boucle
    Au bout d'un certain nombre de passages (parfois 15000) il se plante avec le message
    EFOpenError : impossible d'ouvrir le fichier.
    et en relançant, il affiche ensuite : fichier utilisé par un autre processus.
    J'ai même doublé la boucle fileexists par une autre avec findfirst,etc.
    Savez vous comment éviter celà et avoir un programme fiable, capable de tourner le temps voulu ?
    Merci de vos conseils
    PS Le câble réseau est débranché.
    je suppose qu'il faut vérifier que le process qui génère le fichier soi terminé (et qu'il ai donc fermé le fichier)...tu peux aussi tenter un accès exclusif, et boucler tant que tu ne l'obtiens pas.

  3. #3
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    je suppose qu'il faut vérifier que le process qui génère le fichier soit terminé (et qu'il ait donc fermé le fichier)..tu peux aussi tenter un accès exclusif, et boucler tant que tu ne l'obtiens pas.
    Merci, mais je n'ai pas la moindre idée de comment procéder pour aucune de ces suggestions.

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par Nebulix Voir le message
    Merci, mais je n'ai pas la moindre idée de comment procéder pour aucune de ces suggestions.
    recherche CreateProcess et WaitForSingleObject dans le forum pour la première

    et regarde fmShareExclusive ou sa version API Windows OF_SHARE_EXCLUSIVE

    PS: ta citation est de Nicolas Boileau

  5. #5
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    recherche CreateProcess et WaitForSingleObject dans le forum pour la première

    et regarde fmShareExclusive ou sa version API Windows OF_SHARE_EXCLUSIVE

    PS: ta citation est de Nicolas Boileau
    Je rassemble mon courage et je regarde.
    PS
    Boileau a écrit :
    ce qui bien se conçoit s'exprime clairement.
    Nuance.

  6. #6
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    J'ai inséré la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    repeat
    idone:=findfirst(...);
    findclose;
    sleep(50);
    until idone=0
    le prog n'a planté qu'au bout de 18000 coups, mais pour une autre raison : fichier endommagé !
    ( je sauve les fichier sur une clé USB, croyez-vous que ce soit lié ? )

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 754
    Points : 13 340
    Points
    13 340
    Par défaut
    J'éviterais cette boucle et passerais plutôt par un Shell Change Notifier.
    Regarde ici.

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 851
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 851
    Points : 15 268
    Points
    15 268
    Par défaut
    Citation Envoyé par Nebulix Voir le message
    (...) le prog n'a planté qu'au bout de 18000 coups, mais pour une autre raison : fichier endommagé !
    "18 000 coups", comment le sais-tu ? Tu loggues tout ?
    18 000 tout rond ?
    Tu as donc le nom du fichier, tu peux le recopier à la main ?
    Tu peux l'ouvrir ?
    Ça serait dommage que le programme plante à cause d'un fichier endommagé, tu devrais mieux gérer les erreurs, pour pouvoir continuer si ça ne gène pas le fonctionnement de la suite.

    Citation Envoyé par Nebulix Voir le message
    je sauve les fichiers sur une clé USB, croyez-vous que ce soit lié ?
    Oui ou non... Teste ta clé... Teste ce "fichier endommagé"...

  9. #9
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    L'erreur de fichier endommagé ne s'est pas reproduite.
    Malheureusement EFOpenError est récurrente.
    J'ai essayé d'allonger les "sleep" sans résultat.
    J'ai essayé aussi le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    findfirst(...,sr);
    repeat
    try
    bm.loadfromfile(sr.name);
    bm2:=bm;
    findclose(sr);
    idone:=1;
    except
    on EFOpenerror do idone:=0;
    end;
    until idone=1;
    pour retrouver un plantage avec EFOpenError !!!
    Le message suivant est : fichier utilisé par un autre processus. Y aurait-il un programme fantôme qui utilise les fichiers ?

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par Nebulix Voir le message
    L'erreur de fichier endommagé ne s'est pas reproduite.
    Malheureusement EFOpenError est récurrente.
    J'ai essayé d'allonger les "sleep" sans résultat.
    J'ai essayé aussi le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    findfirst(...,sr);
    repeat
    try
    bm.loadfromfile(sr.name);
    bm2:=bm;
    findclose(sr);
    idone:=1;
    except
    on EFOpenerror do idone:=0;
    end;
    until idone=1;
    pour retrouver un plantage avec EFOpenError !!!
    Le message suivant est : fichier utilisé par un autre processus. Y aurait-il un programme fantôme qui utilise les fichiers ?
    ProcessXP permet de retrouver le process qui utilise un fichier donné, très pratique

  11. #11
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par Nebulix Voir le message
    Boileau a écrit :
    ce qui bien se conçoit s'exprime clairement.
    Pourquoi ne pas rapporter la citation dans sa totalité : "Ce qui se conçoit bien s'exprime clairement et les mots pour le dire arrivent aisément."



    JJE

  12. #12
    Membre expérimenté
    Profil pro
    chercheur
    Inscrit en
    Avril 2004
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : chercheur

    Informations forums :
    Inscription : Avril 2004
    Messages : 830
    Points : 1 453
    Points
    1 453
    Par défaut
    Une partie de la réponse sans doute
    Merci Droïde !
    Citation Envoyé par Droïde Système7 Voir le message


    Ça faisait longtemps que je n'avais eu l'occasion, à chatouiller du code en rapport avec la gestion des exceptions.

    Hé oui en général, dès que l'on s'approche de près où de loin vers ces méthodes, c'est que ça devient chaud quelque part.

    J'ai donc ajouté du code aux bons endroits et testé...

    J'ai testé et re testé... mais sans jamais avoir un résultat positif ; comme si tout code ajouté ne servait rigoureusement à rien.

    J'ai consulté scrupuleusement des tutos, mais en vain, toujours le même résultat

    Au bout de plusieurs heures, si si... j'ai eu comme un flash

    Bon sang mais c'est bien sûr !!!

    Si ça vous arrive, pensez à moi.

    Heuuuuuu, j'oubliais : pensez à tester votre exe hors EDI hein.

    Enfin je suis sous D7, peut-être que les choses sont gérées désormais de façon différente sous d'autres versions de Delphi ?

Discussions similaires

  1. [2.1][jdk1.3][Junit] Erreur incompréhensible!
    Par Sniper37 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 29/04/2005, 19h03
  2. Erreur incompréhensible à la ligne 200 (sur 190 ?!)
    Par transistor49 dans le forum Qt
    Réponses: 3
    Dernier message: 22/03/2005, 23h09
  3. [Fichiers] Erreur incompréhensible
    Par Clorish dans le forum Langage
    Réponses: 5
    Dernier message: 14/12/2004, 17h18
  4. [JSP] Erreur incompréhensible
    Par xxaragornxx dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/09/2003, 16h37

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