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

API, COM et SDKs Delphi Discussion :

Savoir si un fichier est "locké"


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 540
    Par défaut Savoir si un fichier est "locké"
    Bonjour à tous

    Afin d'éviter une exception à l'ouverture d'un fichier, je voudrais savoir s'il existe une API permettant de savoir si un fichier est "locké". Soit par un autre prog, soit par l'OS.

    J'ai cherché ds ma doc sur les API Win32... pas grand chose : il semble que seule CreateFile() dispose d'un dword (dwShareMode) permettant de savoir justement si le périphérique (ou fichier) est libre ou non.

    Mais : faut-il déjà créer le fichier, ce qui va provoquer l'exception (Handle_F := FileOPen(Nom_Fichier, fmOpenRead);

    Il doit bien y avoir un moyen

    Merci :hello:

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Tu peux regarder du cote de FileOpen et du flag fmShareExclusive

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     var
     Handle : Integer;
     [...]
     Handle := FileOpen( f , fmShareExclusive ); // Ouvrir le fichier en mode exclusif
     if (Handle <> -1) then                    
     begin
       FileClose(Handle) ;
       // Le fichier est non utilisé;
     end else
     begin
      //Le fichier est déja utilisé
     end ;

  3. #3
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 929
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 929
    Par défaut
    Il n'y a à ma connaissance pas d'autre moyen que d'essayer d'ouvrir un fichier en écriture.

    Il faut également comprendre que gérer une exception n'est pas forcement négatif (si elle n'intervient pas 100x à la seconde) et surtout pas plus compliqué qu'un if

  4. #4
    Membre très actif
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Par défaut
    Salut,

    Sur D7, j'encadre les instructions 'chatouilleuses' par {$I-} et {$I+}. Directives qui mettent entre parenthèses les prises en compte des erreurs d'Entrée/Sortie (s'il y a eu un message d'erreur, IOResult envoie une valeur <>0 qui correspond au code d'erreur d'Entrée/Sortie).

    Puis faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if IOResult=0 then 
    //...(traduit en bon français : «si y'a pas de couille dans l'potage then...»)

  5. #5
    Membre éclairé

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 540
    Par défaut
    Citation Envoyé par Caribensila Voir le message
    Salut,

    Sur D7, j'encadre les instructions 'chatouilleuses' par {$I-} et {$I+}. Directives qui mettent entre parenthèses les prises en compte des erreurs d'Entrée/Sortie (s'il y a eu un message d'erreur, IOResult envoie une valeur <>0 qui correspond au code d'erreur d'Entrée/Sortie).

    Puis faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if IOResult=0 then 
    //...(traduit en bon français : «si y'a pas de couille dans l'potage then...»)
    Vous avez raison tous les deux. J'ai tendance à prendre les exceptions pour des bugs, alors qu'il s'agit d'autre chose.

Discussions similaires

  1. savoir si un fichier est ouvert
    Par niclalex dans le forum Access
    Réponses: 2
    Dernier message: 12/10/2005, 19h19
  2. Comment savoir qu'un fichier est modifie
    Par moniphal dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2005, 10h26
  3. Unix - Comment savoir si un fichier est ouvert
    Par freddyboy dans le forum C
    Réponses: 7
    Dernier message: 06/10/2004, 15h53

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