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

C# Discussion :

Besoin d'aide sur FileSystemWatcher


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 63
    Points
    63
    Par défaut Besoin d'aide sur FileSystemWatcher
    Bonjour à tous..

    j'ai trouver sur le forum des exemples d'utilisation sur cette methode..

    mon souci est le suivant, pour mettre dans le context je fais des plugins pour meediOS, un logiciel htpc.

    Donc je lance via la configuration de meediOS mon plugin, qui quand il est executé va me creer un fichier si il detecte une modif dans le rép.

    Comme mon plugin n'est pas lancé en permanence, si des modifs sont faite pendant ce temps mon fichier ne se créer pas, logique !

    ma question, comment faire pour lorsque je lance mon plugin il détecte si des modifs on été faite dans le répertoire.

    ex :
    je lance mon plugin le lundi, il fais son job, tout va bien..
    le mardi je supprime un rép
    je lance mon plugin le mercredi, il détecte qu'il y a eu une modification alors il créer mon fichier

    Je ne veux pas passer par un programme résident, enfin voila, je suis newbie complet, j'ai commencer le C# il y a quinze jours.. merci de votre aide.

  2. #2
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Ben j'sais pas, mais tu pourrais p.ex lister tout ce que tu as dans ton répertoire (faire une liste de FileInfo) et comparer lorsque tu lance ton plugin...

  3. #3
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    A mon avis t'es obligé d'avoir un programme résident comme tu dis ou un service... Sinon tu dois stocker la date de modification de chaque répertoires et fichiers contenus dans ta racine et la comparer à l'ouverture de ton application. Si elle est différente et bien c'est que ce fichier ou dossier a été modifié. Checker aussi s'il y en a des nouveaux ou des manquants...
    Bon courage...

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 63
    Points
    63
    Par défaut
    bon bin c'est pas gagné

    je vais opter pour la solution de lister les fichiers et réps dans un txt et faire la comparaison à chaque lancement.. vous avez un morceau de code à me filer ou une piste vers laquelle me lancer ? merci d'avance

  5. #5
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Ben, avec Directory.GetFiles() tu récupère tous les fichiers (en plus t'as même pas besoin de faire de la récursivité, t'as le param SearchOption qui le fera pour toi).
    Bon là t'as tous tes fichiers.
    Pour chaque fichier tu crée un FileInfo qui te donne les infos nécessaires à une comparaison ultérieure (quand tu veux savoir si tes fichiers on changé)
    Tu mets tout ça dans une liste typée.
    Tu sérialise ta liste pour la sauvegarde.
    Au démarrage tu désérialise ta liste.
    Tu compare,
    Tu mets à jour les données de chaque fichier,
    Tu ajoute les nouveaux.
    Pour tous le nouveaux ou ceux qui ont été modifiés, tu effectue ton traitement.
    Y a rien de très sorcier....

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par ppphil Voir le message
    Y a rien de très sorcier....
    Je t'assure que si ! j'ai commencer le c# il y a quinze jours et tu emploi bcq de termes encore inconnu.. si tu est d'accord je vais essayer de faire point par point et je viendrais te faire un ptit coucou souvent pour te poser des questions .. ^^

  7. #7
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Commence par ça, ce sera déjà un bon début...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
          string[] Fichiers;
          FileInfo fi;
          //Liste de hachage typée dont la clef est le chemin du fichier et la valeur le FileInfo du fichier
          Dictionary<string, FileInfo> ListeFichiers;
     
          ListeFichiers = new Dictionary<string, FileInfo>();
     
          //Listage de tous les fichiers contenus dans MonRépertoire incluant les sous-répertoires
          Fichiers = Directory.GetFiles("C:\\MonRépertoire", "*", SearchOption.AllDirectories);
     
          //Ajout de chaque couple clef-valeur dans la liste ListeFichiers
          foreach (string Fichier in Fichiers)
          {
            fi = new FileInfo(Fichier);
            ListeFichiers.Add(Fichier, fi);
          }
    Après regarde ce que tu peux voir dans le FileInfo de chaque fichier (taille, dernière modif, etc....)

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par ppphil Voir le message
    Commence par ça, ce sera déjà un bon début...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
          string[] Fichiers;
          FileInfo fi;
          //Liste de hachage typée dont la clef est le chemin du fichier et la valeur le FileInfo du fichier
          Dictionary<string, FileInfo> ListeFichiers;
     
          ListeFichiers = new Dictionary<string, FileInfo>();
     
          //Listage de tous les fichiers contenus dans MonRépertoire incluant les sous-répertoires
          Fichiers = Directory.GetFiles("C:\\MonRépertoire", "*", SearchOption.AllDirectories);
     
          //Ajout de chaque couple clef-valeur dans la liste ListeFichiers
          foreach (string Fichier in Fichiers)
          {
            fi = new FileInfo(Fichier);
            ListeFichiers.Add(Fichier, fi);
          }
    Après regarde ce que tu peux voir dans le FileInfo de chaque fichier (taille, dernière modif, etc....)

    Bon je sais plus trop comment faire, car ton idée est la meilleur, mais le soucis c'est que c'est extremement long de lister tous les fichiers, plus long que d'executer le code !
    Je t'explique un peu mieux mon projet :

    mon plugin analyse chaque fichier pour télécharger les images correspondantes au fichier, ca c'est déjà relativement long, je voulais lancer cette partie de code uniquement si il y a de nouveau fichier dans mon rép, mais c'est plus long de lister tous les fichiers que d'executer le code.

    A moins que je fasse mal quelque chose..

  9. #9
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Si tu ne peut pas laisser ton soft tourner sur la machine (en service par ex), je ne vois pas ce que tu peux faire sinon de tout lister et de comparer avec la liste d'une session différente.
    Par contre tu peux gagner du temps en triant les fichiers que tu veux lister :
    par ex pour tous les exe du dossier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fichiers = Directory.GetFiles("C:\\MonRépertoire", "*.exe", SearchOption.AllDirectories);
    Maintenant, reste à savoir si ton soft ne fait cette recherche qu'une seule fois au démarrage ou s'il le fait encore plusieurs fois en cours d'exécution. Je veux dire par là qu'un listage, même s'il est plus ou moins long, s'il n'est lancé qu'à l'initialisation de l'application, ça peut encore passer.
    Mais c'est vrai que si tu veux lister tout le répertoire c: ça peut durer un moment.

  10. #10
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2009
    Messages : 82
    Points : 63
    Points
    63
    Par défaut
    bon j'ai fait autrement..

    j'ai lister le nombre de fichier, je l'enregistre dans la bdr, ensuite lors du lancement du plugin, je liste les fichier si # alors je lance mon code, c moins précis qu'avec la liste compléte des fichier et du fileinfo, mais au moins c'est super rapide.. encore un gros merci pour ton aide ! c agréable pour des débutants comme moi !

Discussions similaires

  1. besoin d'aide sur trigger
    Par devalender dans le forum SQL
    Réponses: 2
    Dernier message: 18/07/2004, 22h28
  2. [D7] Besoin d'aide sur un PChar
    Par bobby-b dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2004, 16h42
  3. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  4. [intermedia] besoin d'aide sur script PL/SQL
    Par SteelBox dans le forum PL/SQL
    Réponses: 8
    Dernier message: 05/01/2004, 19h59
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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