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 :

Problème de réouverture de fichier texte


Sujet :

Langage Delphi

  1. #1
    Membre régulier Avatar de EssaiEncore
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 74
    Points
    74
    Par défaut Problème de réouverture de fichier texte
    Bonjour,

    J'ai un fichier texte contenant :
    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
     
     
    <HTML> 
    <HEAD> 
    <TITLE> 
    Suivi de programme 
    </TITLE> 
    </HEAD> 
    <BODY> 
    <CENTER> <H1> 
    Arborescence </H1> 
    </CENTER> 
    <script 
    type="text/javascript"> 
    function Go(){return} 
     
     
     [**ARBORESCENCE_SUIVI_PROGRAMME**] 
    ... reste du code JS 
     
    </script> 
    </body> 
    </html>
    sous delphi, je charge ce fichier texte, remplace [**ARBORESCENCE_SUIVI_PROGRAMME**] par le contenu de mon memo
    et sauvegarde sous un nom de fichier SUIVI_PROGRAMME.htm.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Temp := TstringList.Create;
    Temp.LoadFromFile('FRAME.txt');
    Temp.Text:=AnsiReplaceText(Temp.Text,'[**ARBORESCENCE_SUIVI_PROGRAMME**]',Memo1.Lines.text);
    Temp.SaveToFile('SUIVI_PROGRAMME.htm');
    Temp.Free;
    Grace a la FAQ et surtout a votre aide, cela marche nikel.

    Ce code s'ouvre sur FormActivate de ma fenetre, la tout marche, mais quand je veux recharger le code grace a un bouton qui fait reference au FormActivate, lors de ce second passage
    le compilateur me genere une erreur "Mon projet a provoqué une classe d'exception EFOpenError, Impossible d'ouvrir le fichier FRAME.txt""
    :
    Merci d'avance

  2. #2
    Membre régulier Avatar de EssaiEncore
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 74
    Points
    74
    Par défaut
    Personne n'a une petite idée ?? Car la je seche....

  3. #3
    Membre émérite Avatar de Cpt Anderson
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 625
    Points : 2 479
    Points
    2 479
    Par défaut
    moi ca marche bien...
    t'as mis quoi comme parametre dans ton appel de FormActivate ? Sender ?

  4. #4
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Juste comme ca, n 'aurais-tu pas simplement par hasard ouvert FRAME.txt avec un éditeur qui l'ouvre de façon exclusive ? (en d'autres termes, ferme tout sauf delphi, bien entendu, pour voir)

  5. #5
    Membre régulier Avatar de EssaiEncore
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 74
    Points
    74
    Par défaut
    salut , et merci de votre aide

    DMO : je ne pense pas avoir ouvert mon fichier avec un éditeur qui l'ouvre de façon exclusive car j'ai utilisé une variable TstringList, donc, et je peux me tromper, n'est ce pas comme un tableau temporaire ? il ne s'ouvre pas a proprement parler !!!

    Cpt Anderson : j'ai mit seulement cela apres ma procedure et l'affectation des valeurs a mon memo.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Temp := TstringList.Create;
    Temp.LoadFromFile('Frame2.htm');
    Temp.Text:=AnsiReplaceText(Temp.Text,'[**ARBORESCENCE_SUIVI_PROGRAMME**]',Memo1.Lines.text);
    Temp.SaveToFile('Frame_droite.htm');
    Temp.Free;  
    CopyFile(PChar(''+(ExtractFilePath(Application.ExeName)+'Frame_droite.htm')+''),
    PChar(''+Edit3.text+'\Frame_droite.htm'+''),
    true);
    NB : Frame.txt est devenu Frame2.htm et SUIVI_PROGRAMME.htm est devenu Frame_droite.htm.

    Mon premier passage dans le code marche, c lors du second qu'il me crer l'erreur.

    Peut etre doit ton fermer ou rénitialisé ma variable temporaire Temp, mais comment ??

    Merci d'avance

  6. #6
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par EssaiEncore
    DMO : je ne pense pas avoir ouvert mon fichier avec un éditeur qui l'ouvre de façon exclusive car j'ai utilisé une variable TstringList, donc, et je peux me tromper, n'est ce pas comme un tableau temporaire ? il ne s'ouvre pas a proprement parler !!!
    Non, il voulait savoir si tu ne l'avait pas ouvert avec WordPad, Word ou OpenOffice par exemple.


    Sinon, tu dis plus haut que tu appelle ForMActivate ? comment le fais-tu et de où ? A mon avis le problème viens de là...

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Déjà d'avoir mis une fonction de ce type dans le onActivate est un risque d'erreur.
    Car le OnActivate s'enclenche à chaque fois que la form reprend le focus.

    Citation Envoyé par Aide Delphi
    Utilisez l'événement OnActivate pour effectuer des actions particulières quand la fiche reçoit la focalisation. Une fiche devient active quand elle obtient la focalisation, par exemple quand l'utilisateur clique dans la fiche.

  8. #8
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Malatar
    Déjà d'avoir mis une fonction de ce type dans le onActivate est un risque d'erreur.
    Car le OnActivate s'enclenche à chaque fois que la form reprend le focus.

    Citation Envoyé par Aide Delphi
    Utilisez l'événement OnActivate pour effectuer des actions particulières quand la fiche reçoit la focalisation. Une fiche devient active quand elle obtient la focalisation, par exemple quand l'utilisateur clique dans la fiche.
    +1
    J'allais l'écrire

    Met ton code dans une procedure que tu appelles ensuite d'où tu veux

  9. #9
    DMO
    DMO est déconnecté
    Membre averti
    Avatar de DMO
    Profil pro
    Inscrit en
    Février 2004
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 290
    Points : 343
    Points
    343
    Par défaut
    Citation Envoyé par waskol
    il voulait savoir si tu ne l'avait pas ouvert avec WordPad, Word ou OpenOffice par exemple
    Parfaitement ; merci pour la précision waskol.

    Citation Envoyé par waskol
    Met ton code dans une procedure que tu appelles ensuite d'où tu veux
    Oui, une simple procédure, ou une action (TAction), ou encore pour t'éviter d'appeler explicitement une TOpenDialog (si c'est le cas) un TFileOpen.

    Le LoadFromFile du TStringList (TStrings) ouvrant le fichier en leture seulement (fmOpenRead et fmShareDenyWrite), juste le temps de le charger en plus, je ne vois pas ce qui peut être dérangeant. N'y a-t-il pas autre chose que tu fais qui pourrait-être soupçonnable ?

  10. #10
    Membre régulier Avatar de EssaiEncore
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 74
    Points
    74
    Par défaut
    bizarre..

    Dans mon appli j'ai un TreeView que charge automatiquement les repertoire et fichiers qu'il trouve dans ma BDD grace a un algorithme.
    On peut creer un nouveau fichier et inserer des fiches.

    Voila, l'appli est posé.
    Donc a l'ouverture de ma fiche, le compilateur va directement chercher les repertoires, c pour cela que jai choisi On activate, de plus ma fenetre est en Showmodal, donc pas de probleme a se niveau.

    J'ai un bouton dans mon appli, nommé "HTML" qui recharge le formactivate afin de recharger le treeview, apres l'ajout d'un repertoire ou fichier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JvTreeView1.Items.Clear;
    Fm_arbo.FormActivate(nil);
    Et la sa devient bizarre ?? lol

    lorsque je crer un REPERTOIRE et que j'appuis sur le bouton tout en ok, par contre qu'en je crer un FICHIER et que je fais la meme manip , la ca plante ???
    code pour la creation du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CopyFile(PChar(''+Edit_lien.text+''),
    PChar(''+Edit3.text+racine+''),
    true);
    copie du fichier dans le repertoire cible

    et apres une requete insertion pour entrer le chemin et le nom dans la BDD.

    En clair, erreur de rechargement qu'en un fichier est créer.

    Je vais essayer d'eplucher le code sous le bouton HTML

    Merci a tous .

  11. #11
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par EssaiEncore
    Donc a l'ouverture de ma fiche, le compilateur va directement chercher les repertoires, c pour cela que jai choisi On activate, de plus ma fenetre est en Showmodal, donc pas de probleme a se niveau.
    Le showmodal n'empeche pas le problème du onActivate (passer d'une application à l'autre suffit)
    Le onShow est mieux pour ce que tu veux faire. Lui ne s'enclenche que quand la form.visible passe à true.

  12. #12
    Membre régulier Avatar de EssaiEncore
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 74
    Points
    74
    Par défaut
    Merci pour ces précision

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2003
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 23
    Points : 22
    Points
    22
    Par défaut
    Salut,

    Il faut savoir que OnActive ne s'exécute pas forcément qu'une seule fois, et pas forcément une fois après l'autre... J'ai eut le même problème avec un rechargement de DLL dynamique, et je me suis rendu compte que lorsque ma fiche prenait le focus, OnActivate était raisé 3 fois de manière imbiquée (surtout si tu fais des modifications sur l'IHM dans la fonction)

    Le mieux serait peut être de charger le fichier OnCreate ou OnShow et de le rafraîchir lorsqu'une modif est effectuée dessus

    Tout dépend de quand ton fichier doit être réécrit, mais même pour des questions de performance, il faudrait exécuter cette opération uniquement en cas de besoin!

  14. #14
    Membre régulier Avatar de EssaiEncore
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 74
    Points
    74
    Par défaut
    J'ai fait un test avec la propriété FileExists.
    Il trouve bien le fichier (car rendre dans la boucle), mais renvoi qu'en meme l'erreur d'ouverture..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if fileExists('C:\DEVINTERNE\SuiviProgramme Version 5\Frame2.htm') then
     begin
     Temp := TstringList.Create;
     Temp.LoadFromFile('Frame2.htm');
     Temp.Text:=AnsiReplaceText(Temp.Text,'[**ARBORESCENCE_SUIVI_PROGRAMME**]',Memo1.Lines.text);
     Temp.SaveToFile('Frame_droite.htm');
     Temp.Free;
    :

  15. #15
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Ce doit être ton CurrentDir qui n'est pas bon.

    Evites ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Temp.LoadFromFile('Frame2.htm') ;
    ...
    Temp.SaveToFile('Frame_droite.htm');
    Et écris ça à la place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     var Chemin:string;
     
     Chemin:='C:\DEVINTERNE\SuiviProgramme Version 5\';
     Temp := TstringList.Create;
     Temp.LoadFromFile(Chemin+'Frame2.htm');
     Temp.Text:=AnsiReplaceText(Temp.Text,'[**ARBORESCENCE_SUIVI_PROGRAMME**]',Memo1.Lines.text);
     Temp.SaveToFile(Chemin+'Frame_droite.htm');
     Temp.Free;



    Sinon, quel code erreur te renvois Delphi ?


  16. #16
    Membre régulier Avatar de EssaiEncore
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 74
    Points
    74
    Par défaut

    MERCI.
    Ton code marche a merveille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     Chemin := ExtractFilePath(Application.ExeName);
    Temp := TstringList.Create;
     Temp.LoadFromFile(Chemin+'Frame2.htm');
     Temp.Text:=AnsiReplaceText(Temp.Text,'[**ARBORESCENCE_SUIVI_PROGRAMME**]',Memo1.Lines.text);
     Temp.SaveToFile(Chemin+'Frame_droite.htm');
     Temp.Free;

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

Discussions similaires

  1. Problème d'import de fichier texte distant
    Par ouss dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/06/2007, 20h24
  2. Problème serveur FTP-attribut fichier texte
    Par fabpeden dans le forum C
    Réponses: 1
    Dernier message: 26/05/2007, 03h59
  3. Réponses: 6
    Dernier message: 12/04/2007, 14h22
  4. problème lecture d'un fichier texte
    Par karimspace dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/03/2007, 08h55
  5. Problème listes chaînées et fichier texte
    Par khayyam dans le forum Pascal
    Réponses: 2
    Dernier message: 24/01/2007, 20h11

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