Empêcher une ouverture multiple d'un fichier [Résolu]

cs_lolo69100 11 Messages postés mardi 17 juillet 2007Date d'inscription 16 septembre 2007 Dernière intervention - 3 sept. 2007 à 10:49 - Dernière réponse : BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention
- 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
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
cs_lolo69100 11 Messages postés mardi 17 juillet 2007Date d'inscription 16 septembre 2007 Dernière intervention - 3 sept. 2007 à 14:56
3
Merci
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

Merci cs_lolo69100 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_lolo69100
JM247L 444 Messages postés mardi 27 mars 2007Date d'inscription 1 mars 2011 Dernière intervention - 3 sept. 2007 à 11:41
0
Merci
Bonjour,
Est-ce que ce fichier peut être modifié lors de l'ouverture par le 1er Utilisateur ?
JML
 Partageons notre savoir et nos acquis
Commenter la réponse de JM247L
cs_lolo69100 11 Messages postés mardi 17 juillet 2007Date d'inscription 16 septembre 2007 Dernière intervention - 3 sept. 2007 à 11:50
0
Merci
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!
Commenter la réponse de cs_lolo69100
JM247L 444 Messages postés mardi 27 mars 2007Date d'inscription 1 mars 2011 Dernière intervention - 3 sept. 2007 à 13:36
0
Merci
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
Commenter la réponse de JM247L
cs_lolo69100 11 Messages postés mardi 17 juillet 2007Date d'inscription 16 septembre 2007 Dernière intervention - 3 sept. 2007 à 13:49
0
Merci
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.
Commenter la réponse de cs_lolo69100
JM247L 444 Messages postés mardi 27 mars 2007Date d'inscription 1 mars 2011 Dernière intervention - 3 sept. 2007 à 14:13
0
Merci
Applique le controle proposé plus haut

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

http://www.vbfrance.com/code.aspx?ID=43957
Commenter la réponse de cs_lolo69100
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 3 sept. 2007 à 17:22
0
Merci
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++
Commenter la réponse de BruNews

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.