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
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
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
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);
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; }
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 ...
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.
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...
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
Bon déjà j'ai bien raté mon code. Ca m'apprendra.
Voilà un code qui fonctionne :
Cependant, si une application ouvre le fichier, mais le relâche ensuite, il est impossible de savoir que le fichier a été ouvert...
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;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager