Empêcher une ouverture multiple d'un fichier

Résolu
cs_lolo69100 Messages postés 11 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 16 septembre 2007 - 3 sept. 2007 à 10:49
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 3 sept. 2007 à 17:22
Bonjour à tous!

Mon problème est très simple, je ne sais pas comment détecter la fermeture d'un fichier par l'utilisateur. Le but final étant d'empêcher l'ouverture du même fichier plusieurs fois. Il s'agit d'un fichier .txt. Autre précision, le fichier en question est ouvert par mon application via la commande suivante:

Shell "C:\windows\notepad.exe help.txt", vbNormalFocus

Merci d'avance pour votre aide

9 réponses

cs_lolo69100 Messages postés 11 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 16 septembre 2007
3 sept. 2007 à 14:56
Je réponds moi même à la question:

L'utilisation de la fonction lopen permet de déterminer si un fichier est déjà ouvert ou non.

Exemple d'utilisation:
   
Private Const OF_SHARE_EXCLUSIVE = &H10
Private Declare Function lopen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
Private Declare Function lclose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long
Private Function TestFile(FileToOpen As String) As Boolean
   
    Dim hFile As Long
    '----------------------------
    'Initialisation des variables
    '----------------------------
    TestFile = False
    hFile = -1
    '------------------------------------------------------------------------
    'Ouvre le fichier en mode exclusif & refuse l'accès en lecture & écriture
    'aux autres processus
    '------------------------------------------------------------------------
    hFile = lopen(FileToOpen, OF_SHARE_EXCLUSIVE)
    '---------------------------------------------------------------------
    'Si le fichier est déjà ouvert en lecture ou en écriture par un autre
    'processus ou bien par le processus courant la fonction _lopen renvoie -1.
    '---------------------------------------------------------------------

J'ai également mis une source de démonstration en ligne. Je mettrai le liens quand elle apparaitra
3
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
3 sept. 2007 à 11:41
Bonjour,
Est-ce que ce fichier peut être modifié lors de l'ouverture par le 1er Utilisateur ?
JML
 Partageons notre savoir et nos acquis
0
cs_lolo69100 Messages postés 11 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 16 septembre 2007
3 sept. 2007 à 11:50
A terme, non. Pour précision, le fichier est un fichier d'aide (pour l'instant au format txt mais ça pourra évoluer) qui répertorie l'ensemble des commandes disponibles. Il n'y aura qu'un seul utilisateur à chaque fois et j'aimerai simplement l'empêcher d'ouvrir plusieurs fois un fichier déjà ouvert (simplement parce que ce n'est pas utile).

Merci de ton aide!
0
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
3 sept. 2007 à 13:36
Pour moi il n'y a pas de souci dans la mesure ou un fichier ne peut être ouvert qu'une fois en mémoire
Mais tu peux créer un fichier temporaire et lors d'une tentative de seconde ouverture du fichier si ce fichier existe tu empêche son ouverture. Ce fichier sera supprimé lors de la fermeture du fichier

JML
 Partageons notre savoir et nos acquis
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lolo69100 Messages postés 11 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 16 septembre 2007
3 sept. 2007 à 13:49
Et bien, il semblerait que non. Si dans un projet VB tu associes au clic sur un bouton une commande shell d'ouverture d'un fichier et que lors de l'éxécution tu cliques plusieurs fois sur le bouton, le fichier est ouvert plusieurs fois. Et c'est justement ce que je souhaite éviter.
0
JM247L Messages postés 443 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 1 mars 2011 2
3 sept. 2007 à 14:13
Applique le controle proposé plus haut

JML
 Partageons notre savoir et nos acquis
0
cs_lolo69100 Messages postés 11 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 16 septembre 2007
3 sept. 2007 à 14:24
Pourquoi pas mais comment détecter si ce fichier est déjà ouvert?
0
cs_lolo69100 Messages postés 11 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 16 septembre 2007
3 sept. 2007 à 15:49
Voici le lien de la source:

http://www.vbfrance.com/code.aspx?ID=43957
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 sept. 2007 à 17:22
Voila qui ne répond en rien à ta question initiale car notepad ne garde pas de handle sur le fichier, il copie le fichier dans un bloc mémoire et referme illico le fichier.

A noter aussi que _lopen est une API issue du 16 bits et uniquement conservée pour que les progs antiques puissent encore fonctionner. On utilise CreateFile.

ciao...
BruNews, MVP VC++
0
Rejoignez-nous