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 :

Attendre la disponibilté d'un fichier ?


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 46
    Points
    46
    Par défaut Attendre la disponibilté d'un fichier ?
    Salut !

    Voici mon problème. J'ai un composant qui émet un évènement lorsqu'un fichier est ajouté dans le dossier qu'il surveille. Cet évènement survient dès que le fichier est créé et non lorsque la copie est terminée (fichiers vidéo de grandes tailles).
    Je dois ensuite passer ce fichier dans le compo FilterGraph (DS Pack) pour en récupérer la durée sauf que lorsque la copie n'est pas terminée j'ai une exception me disant que le fichier est utilisé par un autre processus...

    Une idée ..?

    J'ai vu les discussion traitant ce genre de problème sur le forum et rien de concluant... le try...except avec un Sleep m'aurait suffit mais l'exception se produit dans le composant FilterGraph et ne remonte pas jusque dans ma procédure

    J'espère avoir été suffisamment clair pour avoir une direction vers laquelle chercher.

    Merci d'avance.

  2. #2
    Membre expérimenté
    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 : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Tu peux tenter d'ouvrir ton fichier en mode exclusif :

    - Si tu arrive a l'ouvrir: ton fichier n'est pas utilisé, tu peux faire ton traitement
    - Si tu n'arrive pas a l'ouvrir: ton fichier est utilisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Handle := FileOpen( f , fmShareExclusive ); // On essai d'ouvrir le fichier en mode exclusif
     
     // Si le Handle est different de -1 le fichier est non-utilisé
     if (Handle <> -1) then                    
     begin
       FileClose(Handle) ;
       //TRAITEMENT;
     end;

  3. #3
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Citation Envoyé par BobaL Voir le message
    Je dois ensuite passer ce fichier dans le compo FilterGraph (DS Pack)

    ....

    J'ai vu les discussion traitant ce genre de problème sur le forum et rien de concluant... le try...except avec un Sleep m'aurait suffit mais l'exception se produit dans le composant FilterGraph et ne remonte pas jusque dans ma procédure

    Et bien il faut faire la boucle d'attente avec le try except avant de passer le fichier dans le compo FilterGraph.

    Dans la boucle tu peux tenter un renommage du fichier qui plante aussi tant que le fichier n'est pas disponible.

    a+

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    Oui j'ai déjà essayé d'ouvrir le fichier mais bizarement cela ne fonctionnai pas...
    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        repeat
          Handle := FileOpen(FileName, fmOpenReadWrite);
          Sleep(100);
        until Handle = -1;
        FileClose(Handle);
    Je vais essayer de renommer le fichier et je vous tiens au courant...

    Merci encore

  5. #5
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    N'existe t'il pas tout simplement une fonction Delphi permettant de savoir si un fichier F est en cours d'utilisation ou pas ?

  6. #6
    Membre expérimenté
    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 : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Il faut ouvrir le fichier en mode Exclusif!

    Donc utilisé fmShareExclusive, et pas fmOpenReadWrite dans ton FileOpen.

    Le mode exclusif signifie que le fichier ne peut pas etre ouvert par quelqu'un d'autre. Donc si le fichier est déja utilisé, tu ne pourra pas l'ouvrir en mode exclusif. Si tu arrive à l'ouvrir en mode exclusif, c'est que le fichier n'est pas ouvert par un autre processus.

  7. #7
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par sat83 Voir le message
    Il faut ouvrir le fichier en mode Exclusif!

    Donc utilisé fmShareExclusive, et pas fmOpenReadWrite dans ton FileOpen.

    Le mode exclusif signifie que le fichier ne peut pas etre ouvert par quelqu'un d'autre. Donc si le fichier est déja utilisé, tu ne pourra pas l'ouvrir en mode exclusif. Si tu arrive à l'ouvrir en mode exclusif, c'est que le fichier n'est pas ouvert par un autre processus.
    Bon ben voilà !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 74
    Points : 46
    Points
    46
    Par défaut
    Merci de votre aide
    Alors j'ai mis le FileOpen en mode exclusif comme le disait sat83.
    Mais j'ai surtout compris comment fonctionnait le repeat...until en allant vérifier dans le tuto de base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    repeat
      instruction_1;
      ...
      instruction_n;
    until condition_de_sortie;
    Je l'utilisait comme un do...while moi... Du coup en modifiant le = en <> et bien ça marche

    Voici le code pour ceux que ça pourrait intéresser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        repeat
          Handle := FileOpen(FileName, fmShareExclusive);
          Sleep(100);
        until Handle <> -1;
        FileClose(Handle);
    Merci à tous !

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

Discussions similaires

  1. Comment attendre la disponibilté d'un fichier ?
    Par Bruno13 dans le forum Langage
    Réponses: 7
    Dernier message: 07/12/2008, 08h40
  2. [Automation]Attendre la fermeture d'un fichier
    Par DJBORIE dans le forum VBA Access
    Réponses: 3
    Dernier message: 01/05/2007, 20h47
  3. Attendre la fermeture d'un fichier batch pour continuer
    Par niavlys77 dans le forum Access
    Réponses: 5
    Dernier message: 25/01/2007, 15h05
  4. Attendre la création d'un fichier
    Par Homer dans le forum Delphi
    Réponses: 4
    Dernier message: 13/09/2006, 14h11
  5. Attendre l'arrivée d'un fichier
    Par al1_24 dans le forum Linux
    Réponses: 3
    Dernier message: 08/08/2005, 10h13

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