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 :

TFileStream.Create : Comment fermer le fichier ?


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 27
    Points
    27
    Par défaut [Resolu]TFileStream.Create : Comment fermer le fichier ?
    Voiila mon probleme : dans mon programme, il y a sa :
    TFileStream.Create('C:/Test.txt',fmCreate);
    Donc sa ouvre un fichier pour que je puisse ecrire dedans
    Cependant: Une fois que j'ai ecrit dedans, le fichier reste ouvert, ce qui empeche mon programme d'y acceder car ma fonction se repete souvent
    Question : Comment Fermer le fichier?
    J'ai chercher dans l'aide de Delphi mais il avait pas l'air d'en parler.
    J'ai essayer de mettre fmShareDenyNone pour que mon programme puissent y acceder a nouveau mais sa change pas le probleme

    Merci!

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Le fichier est fermé à la destruction de l'objet. Si le fichier reste ouvert, c'est que tu ne libères pas ton objet via un appel indirect ou direct à Free.
    "It's more fun to compute !"

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    SIsi je libere bien la memoire.
    Pour vous aidez je vais donner le code de toute ma fonction car mon explication n'est pas tres claire.
    En faite la fonction recupere un fichier sur le net, l'enregistre, puis le lit.
    voila le code
    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 GetRequest:string;
    var FS : TFileStream;
    var StockRequest : string ;
    var SourceRequest : string;
    var Ouvert : string;
    begin
    //CONFIG DES FICHIER
    StockRequest := 'C:/test';
    SourceRequest := 'http://membres.lycos.fr/.../requete.txt';
    //Fin De La Config Des Fichier
     
    //if Ouvert = '' then
    //begin
    Fs := TFileStream.Create(StockRequest,fmCreate,fmShareDenyNone);
    //Ouvert := 'oui';
    //end;
    try
    DownloadHTTP(SourceRequest,TStream(fs));
     
    finally
    FS.free;  //COmme vous pouvez le voire ici je libere bien la memoire
    Result := LireFichier(StockRequest);
    end;
    end;

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    le fichier reste ouvert
    Alors quelle est l'erreur exacte renvoyée par Delphi ? Où ?
    "It's more fun to compute !"

  5. #5
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Result := LireFichier(StockRequest);
    Ce code correspond à quoi ? ne serai-ce pas dans cette fonction que tu oublies de fermer un stream ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    La premiere fois que j'utilise la fonction, sa marche, mais la 2e fois que je l'utilise, le programme me dit que le fichier est deja utilisé par un programme.
    (Le message apparait pendant l'utilisation, pas pendant la compilation)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Result := LireFichier(StockRequest);
    Cette ligne fait en sorte que la fonction renvoie la requete qu'elle a recuperer sur un serveur http puis stocker dans un fichier.

    Merci!

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    pê qu'en séparant mieux création du stream et lecture... ?
    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
    function GetRequest:string; 
    var
     FS : TFileStream; 
     StockRequest : string ; 
     SourceRequest : string; 
    begin 
     StockRequest := 'C:/test'; 
     SourceRequest := 'http://membres.lycos.fr/.../requete.txt'; 
     try
      Fs := TFileStream.Create(StockRequest,fmCreate,fmShareDenyNone); 
      try 
       DownloadHTTP(SourceRequest,TStream(fs)); 
      finally 
       FS.free; 
       Result := LireFichier(StockRequest); 
     except
       ShowMessage('erreur de création stream');
     end; 
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Non, toujour la meme erreur:
    "Impossible de creer le fichier C:/test"

  9. #9
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Tu es sous Windows, le caractère de séparation dans les chemins est l'anti-slash, pas le slash.
    Essaie avec 'C:\test'...

    @++
    Règles du forum
    F.A.Q Pascal

    Pour me joindre (aucune question technique, merci)

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Marche pas non plus, de toute facons je crois que Delphi corrige ce genre de faute.
    Je met ma fonction LireFichier() Peut etre que le probleme vient de la.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function LireFichier(const chemin : string): string;
    var contenu : string;
        F       : TextFile ;
    begin
    AssignFile(F,chemin);
    Reset(F);
    read(F,contenu);
    Result:=contenu
    end;

  11. #11
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par spyk
    le programme me dit que le fichier est deja utilisé par un programme.
    Ferme le fichier, c'est plus mieux.

  12. #12
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    L'érreur venait bien de LireFichier à mon avis, rajoute
    à la fin de la fonction

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 43
    Points : 27
    Points
    27
    Par défaut
    Tout marche merci beaucoup a tous! Le probleme venait bien de LireFichier() 8)

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

Discussions similaires

  1. Comment fermer un fichier Excel avec Access
    Par zoom61 dans le forum VBA Access
    Réponses: 22
    Dernier message: 24/08/2017, 09h33
  2. Réponses: 2
    Dernier message: 12/06/2009, 10h28
  3. [XL-2000] Comment fermer un fichier excel si il est ouvert mais sans bug s'il n'est pas ouvert
    Par Avinetor dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/06/2009, 14h09
  4. Réponses: 4
    Dernier message: 04/09/2008, 16h55
  5. comment fermer un fichier Excel depuis Access?
    Par audrey_desgres dans le forum Access
    Réponses: 14
    Dernier message: 21/06/2005, 12h43

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