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 :

Verrouiller fichier en lecture et en écriture


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 127
    Points : 49
    Points
    49
    Par défaut Verrouiller fichier en lecture et en écriture
    Bonjour,

    J'ai un petit soucis dans la synchronisation de mes fichiers.

    En fait, un fichier req.txt est utilisé par deux exécutables, a et b. a réécrit régulièrement ce fichier et b le lit en boucle et si le fichier a été modifié, il opère des traitements.

    Le problème est le suivant:

    Mon application plante si a écrit le fichier alors que b est en train de le lire.

    Comment verrouiller mon fichier lorsqu'il est écrit par a ou lu par b?

    Je voudrais un code du style:

    Dans le code de b:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure lectureDansB (fichier : String);
    ...
    While FichierEnEcritureDansA(fichier) do // On attend que a ait fini d'écrire
    begin
       Sleep (100); 
    end;
    ... // Lecture du fichier
    end;
    Dans le code de a:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure EcritureDansA (fichier : String);
    ...
    While FichierEnLectureDansB(fichier) do // On attend que b ait fini de lire
    begin
       Sleep (100); 
    end;
    ... // Ecriture du fichier
    end;
    En fait, je ne vois pas comment écrire les méthodes FichierEnEcritureDansA et FichierEnLectureDansB me renvoyant vrai si respectivement le fichier est en écriture dans a et en lecture dans b.

    Cordialement.

  2. #2
    Invité1
    Invité(e)
    Par défaut
    J’ai une idée à te proposer mais je ne l’ai jamais essayée

    Je te propose d’utiliser les fonctions
    -FileSetReadOnly(constFileName:string;ReadOnly:Boolean):Boolean : Définit les autorisations de fichiers àlecture seule.
    -FileIsReadOnly(constFileName:string):Boolean : Indique si le fichier est en lecture seule.

    Utiliser un autre fichier temporaire temp.txt, et dés que B libère ton fichier req.txt tu le remplace par ton fichier temporaire temp.txt .

    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
    procedure lectureDansB (fichier : String);
    begin
    FileSetReadOnly(fichier, true);
    ..............//Lecture du fichier
    FileSetReadOnly(fichier, false);
    End;
     
     
    Procedure ecrituredansA(fichier:string);
    Begin
    ………// ecrire dans le fichier temporaire
    While FileIsReadOnly(fichier) = 1 do
    Sleep(100)
    ………..//ecraser le fichier req.txt par le temporaire
    End;
    Je ne sais pas si ça va marcher mais c’est une piste

    Bonne chance

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 738
    Points : 13 278
    Points
    13 278
    Par défaut
    Si tu accèdes à tes fichiers par TFileStream, tu peux spécifier le mode fmShareExclusive.

    Dans tes applications, tu peux aussi utiliser un Event qui est fait pour la synchronisation.

    CreateEvent,
    SetEvent,
    ResetEvent,
    WaitForSingleObject
    .

    ou SyncObjs.TEvent.

Discussions similaires

  1. Lien entre Command - Fichier.xls (lecture) - Rapport.xls (écriture)
    Par ninio57855 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 02/02/2011, 09h15
  2. fichier en lecture et en écriture
    Par kazuzu dans le forum Débuter
    Réponses: 6
    Dernier message: 08/03/2010, 17h55
  3. ouvrir un fichier en lecture et en écriture
    Par Baubeau Cédric dans le forum Débuter
    Réponses: 2
    Dernier message: 06/12/2009, 23h25
  4. Manipulation de fichiers en lecture et écriture.
    Par gregterraz dans le forum Débuter
    Réponses: 8
    Dernier message: 21/05/2008, 08h26
  5. Ouvrir un fichier en lecture/écriture en C
    Par ali.ensi dans le forum C
    Réponses: 6
    Dernier message: 10/10/2007, 14h02

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