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

C++Builder Discussion :

Detecter si un Fichier est deja ouvert [Non suivi]


Sujet :

C++Builder

  1. #1
    Membre régulier

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 59
    Points : 84
    Points
    84
    Par défaut Detecter si un Fichier est deja ouvert
    Bonjours, je voudrait detecter au moment ou un utilisateur ouvre un fichier si celui-ci est deja ouvert ou non par un autre utilisateur ...

    Merci d'avance
    Derain Didier

  2. #2
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjour,

    Par quel moyen ce fichier va-t-il être ouvert ?

    Il est en général possible de spécifier qu'on veut ouvrir un fichier en Exclusif. Si l'ouverture échoue, c'est donc qu'une autre application a déjà ouvert le fichier.

    Cordialement,

    Arnaud

  3. #3
    Membre régulier

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 59
    Points : 84
    Points
    84
    Par défaut
    C'est un fichier Texte tous simple qui est sur un srv le l'ouvre par la methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExpList1->LoadFromFile(file);

  4. #4
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Tu peux envisager de faire plutôt quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TFileStream * fsFile = NULL;
    try
    {
      fsFile = new TFileStream(file, fmOpenRead | fmShareExclusive);
      ExpList1->Items->LoadFromStream(fsFile);
    }
    __finally
    {
      ShowMessage("Impossible d'ouvrir le fichier. Un autre utilisateur a peut être  ouvert ce fichier");
      delete fsFile;
    }

  5. #5
    Membre régulier

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 59
    Points : 84
    Points
    84
    Par défaut
    Bien tenter mais........ Non.

    1/ on ne peut pas lire
    ExpList1->Items->LoadFromStream(fsFile);
    car fsFile n'est pas un ansiStriing

    2/ et si je remplace par file il me dit que le fichier et deja utiliser....

    je vais encore chercher ...

  6. #6
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Depuis quand LoadFromStream prend un AnsiString en paramètre ?

    Bon j'ai pas Builder au boulot, ça aide pas pour proposer un truc correct, je regarderai ça ce soir.

  7. #7
    Membre du Club

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 28
    Points : 55
    Points
    55
    Par défaut
    Bonjour,

    effectivement LoadfromStream prend bien un TStream en paramètre...

    Par contre le constructeur de TFileStream prend bien un AnsiString comme premier paramètre. (dans notre cas c'est la variable file).

    Quoi qu'il en soit, je viens de le tester, cela ne fonctionne que si le fichier est déjà ouvert par l'application elle-même (dans un autre TFileStream par exemple)

    Je cherche un autre moyen...

  8. #8
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bonjoru,

    Normallement, un fichier déjà ouvert ne devrait pas pouvoir être réouvert avec fmShareExclusive...

    J'ai du mal à voir en quoi cela ne répond pas au besoin...
    Peux-tu donner le comportement exact souhaité, et ce que fais le code ci-dessus ?

    Arnaud

  9. #9
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Points : 1 271
    Points
    1 271
    Par défaut
    Bon déjà j'ai bien raté mon code. Ca m'apprendra.

    Voilà un code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       TFileStream * fsFile = NULL;
       try
       {
          fsFile = new TFileStream(file, fmOpenRead | fmShareExclusive);
          ListBox1->Items->LoadFromStream(fsFile);
       }
       catch(EFOpenError &e)
       {
          ShowMessage("Impossible d'ouvrir le fichier. Un autre utilisateur a peut être  ouvert ce fichier");
       }
       delete fsFile;
    Cependant, si une application ouvre le fichier, mais le relâche ensuite, il est impossible de savoir que le fichier a été ouvert...

Discussions similaires

  1. Réponses: 7
    Dernier message: 06/05/2014, 10h34
  2. Ouvrir un fichier EXTERNE si l'applic est deja ouverte
    Par srame dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/12/2007, 13h34
  3. [C# V1.1]Detecter si un fichier est deja ouvert ou pas !
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 3
    Dernier message: 25/10/2006, 10h54
  4. Comment savoir si une connexion est deja ouverte?
    Par ghor_bey dans le forum Web & réseau
    Réponses: 3
    Dernier message: 29/07/2005, 16h17

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