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 :

Surveillance des répertoires insuffisante


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 109
    Points : 85
    Points
    85
    Par défaut Surveillance des répertoires insuffisante
    Bonjour ^^

    Voilà, j'ai développé une petite application qui copie les fichiers d'un dossier et de ses sous dossiers dans une base de donnée puis les supprimes, cette fonctionnalité étant appelée par un timer.

    Le risque de cette procédure étant que si un fichier est en train d'être copié voir supprimé, j'ai pas mal d'erreurs à gérer et je ne sais pas par quel bout le prendre.

    J'ai pensé à mettre en place un objet threadé surveillant l'activité du dossier et mettant en pause la copie si elle est en cours, et reportant le prochain appel du timer. J'ai trouvé quelques sources assez proches sur ce site pour la surveillance d'un dossier, très fonctionnelles.

    Mon problème est que je reçois bien un message comme quoi il y a des modifications, mais au début de celle-ci, et quelques messages sur la modifications du fichiers durant sa copie, mais aucun message me disant que c'est terminé !! hors lors de l'ajout d'un fichier volumineux dans mon dossier, mon temps d'attente ajouté au timer pourrait se trouver insuffisant, et donc je risque de lancer la sauvegarder d'un fichier partiellement présent...

    N'existe-t-il pas un autre moyen, par l'écoute des messages windows par exemple (un peu lourd à filtrer ensuite par contre), pour être au courant qu'une copie, une suppression voir une édition de fichier, est EN COURS ou bien TERMINEE ?

    Merci d'avance pour toute piste que vous pourrez m'indiquer...

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    est-ce que tu contrôle l'arrivée des fichiers sur ton répertoire ? En général on règle ce problème en plaçant un fichier style "endofcopy.txt" vide pour signifier que tout les fichiers sont terminés de transférer sur ce répertoire et que l'on peut prendre la main sur ces derniers sans risques.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Je ne sais pas si c'est à ce composant que tu fais référence pour la surveillance du répertoire. Sinon jettes-y un coup d'oeil.
    http://delphi.about.com/od/kbwinshell/l/aa030403a.htm

    Dans ton thread ou timer, utilises des TFileStream en spécifiant fmShareExclusive. Si tu arrives à l'ouvrir, tu est sûr qu'il est complet.

  4. #4
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    1 solution de genre surveillance windows:
    -http://nono40.developpez.com/sources/source0017/
    -http://nono40.developpez.com/sources/source0018/
    merci à Nono40 , à propos, ou est-il .?
    2 utilise fileexiste pour savoir si le fichier existe, ou assignfile+reset (avec directive $-i) avec la 2éme si il existe, tu es sûr qu'il ne sera pas supprimer tant que tu n'as pas appeler closefile, aussi tu peut essayer de le renomer pour savoir si il est "libre"
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 109
    Points : 85
    Points
    85
    Par défaut
    Wow, que de réponses ^^

    Je vais tester vos sources et exemples et je reviens pour valider ^^

    Merci encore !

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 109
    Points : 85
    Points
    85
    Par défaut
    >> Edam
    Oui c'est ça que j'utilise !
    -http://nono40.developpez.com/sources/source0017/
    -http://nono40.developpez.com/sources/source0018/

    j'utilise bien sûr fileexiste, mais la création, l'ajout, la modif... tout ça vient de l'extérieur, sinon effectivement il serait facile d'attendre que la modif soit terminée ou même de provoquer l'exécution du timer.

    >> Aka Guymelef
    Effectivement, un petit fichier est l'affaire serait réglé, j'aime bien !! mais ce n'est pas applicable dans mon contexte malheureusement, il y a des ajouts logiciels (de deux ou trois sources logicielles) mais il peut y avoir des ajouts manuels...

    >> Andnotor
    >> utilises des TFileStream en spécifiant fmShareExclusive
    Effectivement, ça ça me plait, c'est tout simple ^^ je conserve ma copie avec cette option en plus, je conserve aussi le code de nono40 pour surveiller les modif et interrompre entre deux copies et reporter à plus tard, et le tour est joué !!

    le reste, ce n'est plus que de la prog... merci infiniment, je commençait à me mélanger les pinceau, mais la vérité était ailleurs...

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 109
    Points : 85
    Points
    85
    Par défaut
    Bon, petit soucis : fmShareExclusive n'est pas le bienvenue dans vista il semblerait, résultat : peu d'avenir pour mon application si c'est aussi le cas pour le prochain windows.

    Avez vous déjà entendu parler de ce problème ? une autre option de contournement (globale ou uniquement dans le cas de vista avec les petits {$ifdef qui vont bien) ?

    PS : j'ai vu tellement de sources différentes est de contradictions... est-il correcte d'utiliser dans mon cas pour lancer la sauvegarde ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TFileStream.Create(FromFile, fmOpenRead or fmShareExclusive);

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 177
    Points : 130
    Points
    130
    Par défaut
    http://delphi.developpez.com/faq/?pa...llerrepertoire

    Il y a aussi une class en delphi.net mais j'arrive plus à mettre la main dessus

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 109
    Points : 85
    Points
    85
    Par défaut
    Merci, je garde ça sous le coude ^^ mais je préfère conserver ce que j'ai trouvé, le code de nono40 fonctionne très bien (en plus avec les sous dossier, contrairement à ce code apparemment) !!

    par contre ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TFileStream.Create(FromFile, fmOpenRead or fmShareExclusive);
    est-ce que "fmOpenRead or fmShareExclusive" est correct ? les info sur le net sont assez contradictoires.

    en tout cas sur xp, tout ça fonctionne nickel...

Discussions similaires

  1. Empêcher le parcours des répertoires
    Par Tankian dans le forum Sécurité
    Réponses: 5
    Dernier message: 04/03/2005, 15h10
  2. [XP SP2] Surveillance des impressions
    Par sorry60 dans le forum Windows XP
    Réponses: 9
    Dernier message: 02/03/2005, 12h57
  3. [Arborescence des répertoires]
    Par JustAGphy dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 25/03/2004, 14h47

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