Empêcher une ouverture multiple d'un fichier

[Résolu]
Signaler
Messages postés
11
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
16 septembre 2007
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
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

Messages postés
11
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
16 septembre 2007

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
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Bonjour,
Est-ce que ce fichier peut être modifié lors de l'ouverture par le 1er Utilisateur ?
JML
 Partageons notre savoir et nos acquis
Messages postés
11
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
16 septembre 2007

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!
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
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
Messages postés
11
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
16 septembre 2007

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.
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Applique le controle proposé plus haut

JML
 Partageons notre savoir et nos acquis
Messages postés
11
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
16 septembre 2007

Pourquoi pas mais comment détecter si ce fichier est déjà ouvert?
Messages postés
11
Date d'inscription
mardi 17 juillet 2007
Statut
Membre
Dernière intervention
16 septembre 2007

Voici le lien de la source:

http://www.vbfrance.com/code.aspx?ID=43957
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++