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 :

Ouvrir un fichier déjà utilisé.


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 16
    Points
    16
    Par défaut Ouvrir un fichier déjà utilisé.
    Bonjour à tous,

    Cette question a peut-être déjà été posée mais je n'ai pas trouvé ma réponse sur ce forum.

    Voilà le problème : J'ai une application multi-thread. Un des thread utilise un fichier de journalisation dans lequel il écrit à interval régulier (environ 10 fois par secondes).

    Je voudrais pouvoir ouvrir le fichier log à partir du thread principal pour remplir un TMemo.
    Bien sûr, je tombe sur des exceptions du type EFOpenError car le fichier est réservé par l'autre thread.

    Pourtant, j'arrive très bien à ouvrir ce fichier avec Notepad pendant que mon thread écrit dedans !

    Comment faire pour demander une ouverture en lecture seule et remplir mon TMemo ?

  2. #2
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    salut,
    si tu utilise la classe TFileStream dans ton thread principal, appele le create avec (le nom de fichier texte, fmCreate, fmShareDenyNone)

    fmShareDenyNone Rien n'empêche les autres applications de lire ou d'écrire dans le fichier.
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Ok merci, je vais tester ça.
    Mais je suppose que tu voulais dire que je dois utiliser cette classe surtout dans mon deuxieme thread.

  4. #4
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    oui oui oups
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Bizarrement, c encore pire qu'avant !
    Maintenant même Notepad ne peut plus ouvrir le fichier...

    Je fais ca :

    Dans le constructeur de ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FLogFile := TFileStream.Create(FLogFileName, fmCreate, fmShareDenyNone);
    Ensuite j'ai une procédure pour journaliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TRplEngine.LogToFile(text: string);
    begin
        FLogFile.Write(PChar(text)^, Length(text));
    end;
    Et dans le destructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FreeAndNil(FLogFile) ;
    L'écriture dans le fichier se passe bien (sauf que je ne trouve pas comment faire des retours chariots)
    Mais impossible d'accéder au fichier en lecture, que ce soit avec mon thread principal ou avec une autre appli (Notepad, etc.)

    Je ne comprend pas ce qui cloche....

  6. #6
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    L'écriture dans le fichier se passe bien (sauf que je ne trouve pas comment faire des retours chariots)
    remplace write par writeln

    Mais impossible d'accéder au fichier en lecture, que ce soit avec mon thread principal ou avec une autre appli (Notepad, etc.)
    j'avais pas lu la fin de l'aide... :
    Le paramètre Rights indique les bits de permission pour la création du fichier sur Linux lorsque Mode a la valeur fmCreate. Rights est ignoré lorsqu'il est utilisé avec la plate-forme Windows.
    je fais la même chose avec un service windows et je ne garde pas le fichier ouvert je le réouvre et j'append
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par HumanTool
    remplace write par writeln
    Bizarrement, cette méthode n'est pas documentée dans D2005

    Citation Envoyé par HumanTool
    je fais la même chose avec un service windows et je ne garde pas le fichier ouvert je le réouvre et j'append
    C'est ce que je faisait avant, avec une boucle qui essaye 10 fois d'ouvrir... mais c'est pas très propre.

  8. #8
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    remplace write par writeln
    Passe à ta procedure LogToFile le retour chariot:
    C'est ce que je faisait avant, avec une boucle qui essaye 10 fois d'ouvrir... mais c'est pas très propre.
    c'est vrai, essaye avec un timer d'aller le lire le fichier suivant un interval donné...avec une proba de tomber sur un verrou lors de l'écriture dans le fichier +/- petite....
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  9. #9
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    si tu ecrie et tu lie le meme fichier dans le prog pourqoi pas passée par la mémoir (fichier mapper, ou simplement un tableau dinamique)
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    C'est bon j'ai trouvé.
    Il ne fallait pas écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FLogFile := TFileStream.Create(FLogFileName, fmCreate, fmShareDenyNone);
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FLogFile := TFileStream.Create(FLogFileName, fmCreate or fmShareDenyNone);
    Très mal documenté par Borland...

  11. #11
    Membre averti
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Points : 378
    Points
    378
    Par défaut
    si c mal documenté tu l'a trouvé où ?
    est si c résolu cliques sur résolu....
    D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    J'ai trouvé ça sur un forum anglophone, mais je me souviens plus où.
    Désolé pour le "Résolu". Pas habitué encore

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

Discussions similaires

  1. ouvrir un fichier
    Par sofiane61 dans le forum MFC
    Réponses: 3
    Dernier message: 10/01/2004, 23h04
  2. [java][Oracle]Ouvrir un fichier(blob) avec le browser
    Par marsup54 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 11/09/2003, 13h35
  3. Réponses: 9
    Dernier message: 22/03/2003, 21h47
  4. [VBA-E] ouvrir un fichier .xls sans executer les macro
    Par lae_t2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/01/2003, 17h07
  5. [Kylix] Ouvrir un fichier en étant dans KYLIX
    Par Jackepsi dans le forum EDI
    Réponses: 2
    Dernier message: 05/11/2002, 15h59

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