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 :

Service Windows Watch File [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Julien698
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Par défaut Service Windows Watch File
    Bonjour à tous,

    J'ai crée un service Windows qui surveille un répertoire et qui écrit chaque changement dans un fichier texte. Je souhaiterai lui ajouter une fonction qui copie le fichier modifié et qui le colle dans un autre dossier. Est-ce possible ?
    Que faut-il faire à partir de mon programme ?


    Code C# : 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
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    using System.IO;
    using System.Xml.Linq;
    using System.Collections;
    using System.Xml;
     
    namespace WatchDogFolder
    {
        public partial class Service1 : ServiceBase
        {
            public Service1()
            {
                InitializeComponent();
            }
     
            protected override void OnStart(string[] args)
            {           
     
                FileSystemWatcher fsw = new FileSystemWatcher();
                fsw.Path = @"D:/FTP";
                fsw.Filter = "*.*";
                fsw.EnableRaisingEvents = true;
                fsw.IncludeSubdirectories = true;
                fsw.NotifyFilter = NotifyFilters.LastAccess
                                  | NotifyFilters.LastWrite
                                  | NotifyFilters.FileName
                                  | NotifyFilters.DirectoryName;                       
     
                fsw.Created += new FileSystemEventHandler(fsw_Created);
                fsw.Deleted += new FileSystemEventHandler(fsw_Deleted);
                fsw.Changed += new FileSystemEventHandler(fsw_Changed);
                fsw.Renamed += new RenamedEventHandler(fsw_Renamed);            
     
                StreamWriter sw = new StreamWriter(@"C:/WatchDogFolder.log", true);
                sw.WriteLine("Démarrage de WatchDogFolder : " + DateTime.Now.ToLongTimeString());
                sw.Close();
            }
     
            protected override void OnStop()
            {
                StreamWriter sw = new StreamWriter(@"C:/WatchDogFolder.log", true);
                sw.WriteLine("Arrêt de WatchDogFolder : " + DateTime.Now.ToLongTimeString());
                sw.Close();
            }
     
            protected override void OnContinue()
            {
                StreamWriter sw = new StreamWriter(@"C:/WatchDogFolder.log", true);
                sw.WriteLine("Reprise de WatchDogFolder : " + DateTime.Now.ToLongTimeString());
                sw.Close();
            }
     
            protected override void OnPause()
            {
                StreamWriter sw = new StreamWriter(@"C:/WatchDogFolder.log.log", true);
                sw.WriteLine("Mise en pause de WatchDogFolder : " + DateTime.Now.ToLongTimeString());
                sw.Close();
            }
     
            protected override void OnShutdown()
            {
                base.OnShutdown();
            }
     
            public static void fsw_Created(Object source, FileSystemEventArgs e)
            {
                StreamWriter sw = new StreamWriter(@"C:/WatchDogFolder.log", true);
                sw.WriteLine("Creation de fichier" + e.Name);
                sw.Close();
     
            }
     
            public static void fsw_Deleted(Object source, FileSystemEventArgs e)
            {
                StreamWriter sw = new StreamWriter(@"C:/WatchDogFolder.log", true);
                sw.WriteLine("Supression de fichiers" +e.Name);
                sw.Close();
            }
     
            public static void fsw_Changed(Object source, FileSystemEventArgs e)
            {
                StreamWriter sw = new StreamWriter(@"C:/WatchDogFolder.log", true);
                sw.WriteLine("Modification de fichiers" +e.Name);
                sw.Close();
            }
     
            public static void fsw_Renamed(Object source, RenamedEventArgs e)
            {
                StreamWriter sw = new StreamWriter(@"C:/WatchDogFolder.log", true);
                sw.WriteLine("Fichier renommé"+ e.OldName + "en" + e.Name);
                sw.Close();
     
            }
        }
    }

    J'ai essayé de repartir avec Source et e des quatres dernières méthodes, mais CopyTo()ne m'est pas proposé.

    Auriez-vous des idées ?

    Cordialement

    Julien

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FileStream fs = new FileStream(@"C:/WatchDogFolder.log", FileMode.Append, FileAccess.Write);
    StreamWriter MyStream = new StreamWriter(fs);
    MyStream.WriteLine("J'ecris une ligne" + "\r\n"); 
    MyStream.Close();
    fs.Close();
    Et vous trouverez dans fs. les méthodes qui devrait vous intéresser.

    ou alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File.Copy(@"C:/WatchDogFolder.log",MonNouvelEmplacement,true/false)
    Bonne journée.

  3. #3
    Membre chevronné Avatar de Julien698
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Par défaut
    Citation Envoyé par egautier18 Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FileStream fs = new FileStream(@"C:/WatchDogFolder.log", FileMode.Append, FileAccess.Write);
    StreamWriter MyStream = new StreamWriter(fs);
    MyStream.WriteLine("J'ecris une ligne" + "\r\n"); 
    MyStream.Close();
    fs.Close();
    Et vous trouverez dans fs. les méthodes qui devrait vous intéresser.

    ou alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File.Copy(@"C:/WatchDogFolder.log",MonNouvelEmplacement,true/false)
    Bonne journée.
    Merci Egautier18 pour votre réponse, mais ce n'est pas tout à fait ce que je souhaite faire. En fait, lors d'une action sur un fichier dans D:\FTP une ligne dans C:\WatchDogFolder se rajoute, ce que je voudrais c'est de copier le fichier qui a été crée, renommé, ou copié. (Par Exemple je crée le fichier Test.txt dans D:/FTP, j'aurais donc dans les logs que Test.txt à été crée, et après copier Test.txt pour le mettre dans un autre répertoire).

    J'ai essayé ceci mais le service Windows plante et plus rien ne s'écrit dans les logs :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static void fsw_Created(Object source, FileSystemEventArgs e)
            {
                StreamWriter sw = new StreamWriter(@"C:/WatchDogFolder.log", true);
                sw.WriteLine("Creation de fichier" + e.Name + " " + e.FullPath);
                sw.Close();
                File.Copy(e.FullPath, @"D:\COPIE",true); 
            }

    File.Copy ne semble pas marcher pour ma situation a priori, avec e.FullPath pourtant je ne pense pas me tromper, cela désigne bien le fichier en question, la seule chose qui me chagrine c'est la syntaxe de ce chemin. Voici un exemple provenant des logs : e.FullPath = "D:/FTP\Images\Nouvelle image bitmap.bmp", je ne suis pas sur que / puis \ soit bien interprété par le programme.

    Sinon j'ai une autre question, existe-t-il un moyen de mettre des points d'arrêts et de faire le pas à pas de ce service Windows, comme un programme C# classique ?

    Merci d'avance,

    Julien

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Qu'elle est l'erreur générée par le File.copy ?

    Je pense qu'il faut vous assurez que le répertoire D:\COPIE" existe bien.
    Et il faut donner un nom à votre nouveau fichier.

    A mon avis il faudrait écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File.Copy(e.FullPath, @"D:\COPIE\Image.bmp",true);
    Vous ne pouvez pas faire de pas à pas dans un service windows.

    Je vous conseille de créer une petite méthode qui dans chacun de vos try/catch ira écrire dans un journal d'événement l'erreur qui à été relevée.

  5. #5
    Membre chevronné Avatar de Julien698
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2013
    Messages : 237
    Par défaut
    Le dossier D:\COPIE existe bien, je l'ai crée juste pour cette méthode. Je ne peux pas donner de nouveau nom à mon fichier, il doit garder le même que celui du premier répertoire et il peut varier, pour la plupart se seront des images .png , .gig ou .jpg. Je vais tenter de réaliser une structure try-catch , c'est vrai que ça peut m'aider pour comprendre ou est-ce que ça ne va pas.
    Merci pour vos réponses !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Par défaut
    Vous pouvez laisser le même nom.
    Ce que je voulais dire c'est qu'il doit être renseigné dans le chemin ou vous le copié.

    si e.FullPath = "D:/FTP\Images\Nouvelle image bitmap.bmp"

    vous faites donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File.Copy(e.FullPath, @"D:\COPIE\Nouvelle image bitmap.bmp",true);

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

Discussions similaires

  1. Service Windows Timer + Rename File
    Par CHoule dans le forum Services Windows
    Réponses: 1
    Dernier message: 10/09/2014, 17h40
  2. Service Windows Get File
    Par JulienBaldy dans le forum C#
    Réponses: 2
    Dernier message: 15/09/2013, 12h47
  3. [WD7.5] Service Windows
    Par cqfd dans le forum WinDev
    Réponses: 1
    Dernier message: 29/03/2005, 08h58
  4. [VB6]Arreter un service windows
    Par bouboussjunior dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/10/2004, 17h03
  5. [C#] Icône, barre des tâches et Service Windows
    Par SErhio dans le forum Windows Forms
    Réponses: 17
    Dernier message: 03/09/2004, 12h56

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