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

Langage Delphi Discussion :

Fonction IsFileInUse et compilation Win32/Win64


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 38
    Points : 29
    Points
    29
    Par défaut Fonction IsFileInUse et compilation Win32/Win64
    Bonjour,

    J'utilise la fonction IsFileInUse, récupérée sur le 'net', qui permet de savoir si un fichier est en cours d'utilisation par une autre application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function IsFileInUse(fName : string) : boolean;
    var HFileRes : HFILE;
    begin
      Result := false;
      if not FileExists(fName) then
        exit;
      HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE,0, nil,
                             OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, 0);
      Result := (HFileRes = INVALID_HANDLE_VALUE);
      if not Result then
        CloseHandle(HFileRes);
    end;
    En compilant en Win32, elle donne les résultats attendus.
    Par contre en Win64, un fichier ouvert et en cours d'utilisation par une autre appli n'est pas détecté !

    J'utilise Delphi XE7 sous Windows 7.

    Comment faire pour que le résultat soit le même en Win64 ?

    Merci d'avance pour vos réponse.
    BDE78

  2. #2
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 260
    Points : 171
    Points
    171
    Par défaut
    Bonjour,

    Remplace HFILE par THandle, HFILE est seulement pour le 32 bits, il me semble .
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 38
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    Merci pour la réponse.

    Effectivement, en remplaçant la déclaration de type de 'HFILE' à 'THandle' ça fonctionne mieux, que ce soit en Win64 ou Win32.

    Par contre, le comportement de la fonction n'est pas totalement identique :
    J'ai testé avec 2 types de fichiers : JPEG et PDF, ouverts par 2 applis, respectivement la visionneuse JPEG de Windows7 et AcrobatPro v9.0.
    Avec la 1ère version de déclaration (HFILE), les 2 fichiers sont détectés "ouverts".
    Avec la 2ème (THandle), pour le PDF, le fichier est bien détecté "ouvert".
    Par contre, pour le JPEG, il n'est pas détecté "ouvert", mais mon appli peut le ré-écrire (!), et la visionneuse JPEG de Windows, toujours ouverte avec le JPEG, le réaffiche avec les modifs !

    Je marque le sujet "résolu" car mon traitement n'est plus "bloqué" par l'ouverture du fichier.

    Encore merci pour ton aide.

    BDE78

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Il n'y a pas la possibilité d'un mode d'ouverture avec SHARE_EXCLUSIVE ou qqchose d'approchant ?
    Cependant il est toujours possible que certains programmes travaillent avec une copie mémoire du fichier et non le fichier lui-même
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 260
    Points : 171
    Points
    171
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/04/2007, 16h48
  2. cross compilation win32 autotools
    Par magic.goby dans le forum Windows
    Réponses: 4
    Dernier message: 02/12/2006, 14h00
  3. problème de warning en compilant win32 + directx
    Par madcode dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 17/10/2006, 16h58
  4. Réponses: 3
    Dernier message: 27/03/2006, 13h06
  5. [VC++ Express] Problème de compilation win32.
    Par fab29000 dans le forum MFC
    Réponses: 1
    Dernier message: 15/02/2006, 20h16

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