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 :

Fichier xml en tant que fichier d'options d'un Windows Service


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 28
    Par défaut Fichier xml en tant que fichier d'options d'un Windows Service
    Bonjour à tous, je suis actuellement en train de développer un Service Windows qui permet à l'utilisateur de glisser un fichier dans un dossier, ce fichier est renommé selon certaines options, puis envoyé par mail à des adresses également précisées dans les options puis archivé dans un autre dossier.

    Voici ce à quoi ressemble mon fichier xml :
    Code xml : 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
    <Options>
    	<DossierExport path = "chemin/du/dossier/pour/export1">	
    		<DossierArchives>"chemin/du/dossier/pour/archive1"</DossierArchives>
    			<NomFichier nom = "test">
    				<NouveauNom>tRenommé</NouveauNom>
    				<MailTo>
    					<Mail>mail1@fake.com</Mail>
    				</MailTo>
    				<Sujet>Subject Test 1 Test</Sujet>
    				<Texte>Body Text Test 1 Test</Texte>
    			</NomFichier>
    			<NomFichier nom = "planning">
    				<NouveauNom>pRenommé</NouveauNom>
    				<MailTo>
    					<Mail>mail2@fake.com</Mail>
    				</MailTo>
    				<Sujet>Subject Test 1 Planning</Sujet>
    				<Texte>Body Text Test 1 Planning</Texte>
    			</NomFichier>
    	</DossierExport>
    	<DossierExport path = "chemin/du/dossier/pour/export2">	
    		<DossierArchives>chemin/du/dossier/pour/archive2</DossierArchives>
    			<NomFichier nom = "bug">
    				<NouveauNom>bRenommé</NouveauNom>
    				<MailTo>
    					<Mail>mail3@fake.com</Mail>
    				</MailTo>
    				<Sujet>Subject Test 1 Bug</Sujet>
    				<Texte>Body Text Test 1 Bug</Texte>
    			</NomFichier>
    	</DossierExport>
    </Options>

    Et voici mon code :

    Classe DossierExport :
    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
    class DossierExport
        {
            private string chemin;
            private string archive;
            private List<string> mail;
            private string sujet;
            private string texte;
            private string nomFichier;
            private string nouveauNom;
     
            public string Chemin
            {
                get { return chemin; }
                set { chemin = value; }
            }
     
            public string Archive
            {
                get { return archive; }
                set { archive = value; }
            }
     
            public List<string> Mail
            {
                get { return mail; }
                set { mail = value; }
            }
     
            public string Sujet
            {
                get { return sujet; }
                set { sujet = value; }
            }
     
            public string Texte
            {
                get { return texte; }
                set { texte = value; }
            }
     
            public string NomFichier
            {
                get { return nomFichier; }
                set { nomFichier = value; }
            }
     
            public string NouveauNom
            {
                get { return nouveauNom; }
                set { nouveauNom = value; }
            }
     
            public DossierExport()
            {
                Mail = new List<string>();
            }
        }

    Lecture du fichier xml :
    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
    private static List<string> mail = new List<string>();
    private static List<DossierExport> options = new List<DossierExport>();
     
    protected override void OnStart(string[] args)
    {
    XmlDocument doc = new XmlDocument();
    doc.Load(@"chemin/vers/mon/xml");
    XmlNodeList nodeNomDossier = doc.GetElementsByTagName("DossierExport");
    XmlNodeList nodeNomFichier = doc.DocumentElement.SelectNodes("DossierExport/NomFichier");
    foreach (XmlNode node in nodeNomFichier)
    {
        DossierExport dossierExport = new DossierExport()
        {
            Chemin = node.ParentNode.Attributes["path"].Value,
            Archive = node.ParentNode.SelectSingleNode("DossierArchives").InnerText,
            NomFichier = node.Attributes["nom"].Value,
            NouveauNom = node.SelectSingleNode("NouveauNom").InnerText,
            Sujet = node.SelectSingleNode("Sujet").InnerText,
            Texte = node.SelectSingleNode("Texte").InnerText
        };
        foreach (XmlNode mail in node.SelectNodes("MailTo/Mail"))
        {
            dossierExport.Mail.Add(mail.InnerText);
         }
         options.Add(dossierExport);
    }
     
    foreach (XmlNode nodeDossier in nodeNomDossier)
    {
        monitoringDossier(nodeDossier.Attributes["path"].Value);
    }
    Méthode pour renommer les fichiers :
    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
    private static void Renommer()
    {
        foreach (DossierExport test in options)
        {
            foreach (string fileName in Directory.GetFiles(test.Chemin))
            {
                if (fileName.Contains(test.NomFichier))
                {
                     newFileName = test.Chemin + "\\" + test.NouveauNom + Path.GetExtension(test.Chemin + fileName);
                     File.Move(fileName, newFileName);
                }
                else
                {
                     throw new Exception ("Impossible de renommer le fichier car aucun mot ne correspond au fichier d'options.");
                }
            }
        }
    }
    Je vous épargne les try/catch, écriture des événements dans un fichier de log et le report des erreurs dans l'Observateur d'événements.

    Le problème que je rencontre est que si je dépose un fichier qui contient le mot "bug" dans mon dossier d'export2, tout fonctionne parfaitement. Mais si je dépose un fichier qui contient "test" ou "planning" dans mon dossier d'export1, la boucle s'effectue deux fois et le programme ne peux pas s'effectuer en entier.
    Je comprends d'où vient le problème (le fait que chaque fichier ait un Chemin donc je me retrouve avec 3 dont 2 ayant la même valeur) mais je ne vois pas comment contourner cela

    Merci d'avance.

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Le problème que je rencontre est que si je dépose un fichier qui contient le mot "bug" dans mon dossier d'export2, tout fonctionne parfaitement. Mais si je dépose un fichier qui contient "test" ou "planning" dans mon dossier d'export1, la boucle s'effectue deux fois et le programme ne peux pas s'effectuer en entier.
    Laquelle de boucle ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/12/2008, 13h38
  2. Réponses: 1
    Dernier message: 22/04/2008, 11h24
  3. Réponses: 3
    Dernier message: 06/08/2007, 03h44
  4. [DOM] (org.w3c.dom) copier un noeud d'un fichier XML dans un autre fichier XML
    Par snoop dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 13/02/2007, 17h22
  5. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/07/2005, 11h49

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