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 pour Service windows de déplacement de fichiers


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Points : 64
    Points
    64
    Par défaut besoin d'aide pour Service windows de déplacement de fichiers
    Bonjour à tous,

    Je cherche à créer un service windows qui permet de déplacer un type de fichier (.txt, .xls...) d'un dossier source vers un dossier de destination. Mon service doit pouvoir fonctionner selon 3 modes:

    - temps réel
    - a heure fixe
    - tous les X minutes

    Pour l'instant je me concentre sur le fonctionnement en temps réel mais je bloque un peu. Voici mon code:

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
     
    using System.Text;
    using System.Configuration.Install;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceProcess;
    using System.IO;
    using System.Threading;
    using System.Configuration;
     
     
     
    namespace WindowsServiceDVP
    {
        [RunInstaller(true)]
        public class ServiceInstall : Installer
        {
            public ServiceInstall() : base()
            {
                ServiceProcessInstaller process = new ServiceProcessInstaller();
                process.Account = ServiceAccount.LocalSystem;
     
                ServiceInstaller service = new ServiceInstaller();
                service.StartType = ServiceStartMode.Automatic;
                service.ServiceName = "MoveFiles";
                service.DisplayName = "MoveFiles";
                service.Description = "Service de déplacement de fichier";
     
                Installers.Add(service);
                Installers.Add(process);
     
     
            }
        }
     
        public partial class Service1 : ServiceBase
        {
            public string mode;
            private FileSystemWatcher watcher;
            private Timer Schedular;
     
            public Service1()
            {
     
                ServiceInstaller si = new ServiceInstaller();
                si.StartType = ServiceStartMode.Automatic;
                si.DisplayName = "MoveFiles";
                si.Description = "Service de déplacement de fichier";
                si.ServiceName = "MoveFiles";
     
                InitializeComponent();
            }
     
            protected override void OnStart(string[] args)
            {
     
                watcher = new FileSystemWatcher();
                watcher.Path = ConfigurationManager.AppSettings["SourceFolder"];
                watcher.Filter = ConfigurationManager.AppSettings["FileType"];
                watcher.EnableRaisingEvents = true;
                Library.WriteErrorLog("le Service MoveFiles est démarré");
     
                // recuperation du mode de synchronisation
                mode = ConfigurationManager.AppSettings["Mode"].ToUpper();
                Library.WriteErrorLog("Mode de mise à jour:" + mode);
                switch (mode)
                {
                    case "DAILY":
                        Library.WriteErrorLog("Copie des fichiers à : " + System.Configuration.ConfigurationManager.AppSettings["ScheduledTime"]);
                        // A completer
                        break;
                    case "INTERVAL":
                        Library.WriteErrorLog("Copie des fichiers toutes les : " + ConfigurationManager.AppSettings["IntervalMinutes"] + " minutes.");
                        // A completer
                        break;
                    case "REALTIME":
                        watcher.Changed += new FileSystemEventHandler(OnChanged);
                        Library.WriteErrorLog("Copie des fichiers en temps réel");
                        break;
                }          
            }
     
            protected override void OnStop()
            {
     
                watcher.EnableRaisingEvents = false;
                Schedular.Dispose();   
                Library.WriteErrorLog("le Service MoveFiles est stoppé");
     
           }
     
     
     
            private static void OnChanged(object source, FileSystemEventArgs e)
            {
                try
                {
                    string[] Files = Directory.GetFiles(e.FullPath, ConfigurationManager.AppSettings["FileType"]);
     
                    foreach (var item in Files)
                    {
                        File.Move(item, Path.Combine(ConfigurationManager.AppSettings["DestFolder"], Path.GetFileName(item)));
                    }
     
     
     
                    Library.WriteErrorLog("fichiers copiés");
     
                }
                catch
                {
                }
            }
     
        }
    }
    En l'état mon service démarre sans souci, par contre si je rajoute des fichiers dans mon dossier source, rien ne se passe. De plus l'arrêt du service plante avec l'erreur 1016.

    Pouvez-vous me mettre sur la voie?

    Merci pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    Je dirais que le soucis est a chercher du coté du fileSystemWatcher, tu devrais écouter aussi l'event Created pour être notifié de la création de fichier.

    Bonne journée,
    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Points : 64
    Points
    64
    Par défaut
    Salut

    J'ai ajouté l'event Created mais ça ne resoud pas mon problème. N'étant pas familier du filesystemwatch, un peu d'aide serait bienvenue.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    J'ai utilisé le FileSystemWatcher quelque fois avec succès mais je ne connais pas tout de tête, je ne peux que te renvoyer vers sa page msdn. En gros ça ce joue entre les 4 évènements et les NotifyFilter, de plus pour commencer enlève le filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    watcher.Filter = ConfigurationManager.AppSettings["FileType"];
    Tu le remettra après avoir détecté les premiers fichiers.
    Et mets des log dans le catch du OnChanged(..) par ce que la si par exemple ton fichier ne peux pas être déplacé car tenu par un processus ou autre alors tu ne verra rien et tu auras l'impression de ne pas détecter la création du fichier.

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

Discussions similaires

  1. [XL-2013] Besoin d'aide pour créer un report sur un fichier excel
    Par wjulien57 dans le forum Conception
    Réponses: 5
    Dernier message: 15/12/2015, 21h09
  2. Besoin d'aide les services Windows Azure
    Par Reminouche dans le forum Microsoft Azure
    Réponses: 0
    Dernier message: 18/11/2013, 16h42
  3. Réponses: 1
    Dernier message: 09/07/2009, 17h18
  4. Besoin d'aide pour portage d'un driver windows vers QNX
    Par stef88 dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 22/08/2007, 10h21
  5. Réponses: 1
    Dernier message: 12/04/2007, 11h30

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