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 :
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
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); }
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.
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."); } } } }
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.
Partager