Bonjour,
J'ai créé un service Windows contenant un FileSystemWatcher.
Celui ci instancie la délégation OnCreated avec une classe qui contient un certain nombre de chose. Dans cette classe, on copie le fichier vers un autre fichier et on exploite le fichier copier (ça fait beaucoup de chose je ne vais pas rentrer dans le détail).
A la fin de la méthode OnCreated, on supprime le fichier.
Sur Erreur, je m'envois un mail avec le détail de l'erreur et le fichier est supprimé. S'il n'y a pas d'erreur, un document est imprimé et le fichier est supprimé également.
Quand je lance le service et que je met un fichier dans le répertoire écouté par le FileSystemWatcher tout va bien et le document est imprimé et le fichier supprimé. Quand je met un deuxième fichier, une erreur se produit et dans mon mail le détail me dit que le Processus ne peut accéder au fichier "leFichierDonne" car il est utilisé par un autre processus.
Dans la classe qui s'occupe du travail, je ne vais pas dire que je ne lis pas un fichier, mais ce n'est pas le même. La seule chose qu'on fait c'est une copie et une supression à la fin sur ce fichier.
Avez vous une idée de ce qui pourrait bien se passer car là je suis dans la panade....
Un bout de 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 public class FSWatcher { public static void watch() { FileSystemWatcher wtch = new FileSystemWatcher(); wtch.Path = "MonRepertoire" wtch.Filter = "*.txt" wtch.Created = new FileSystemEventHandler(OnCreated); wtch.EnableRaisingEvents = true; } private void OnCreated(object source, FileSystemEventArgs e) { Action a = new Action(e.FullPath); File.Delete(e.FullPath); a = null; } } publc class Action { public Action(string fileInput) { Traitement(fileInput); } private void Traitement(string fileInput) { File.Copy(fileInput,fileSauvegarde,true); /* Ici on fait bcp de choses avec fileSauvegarde, notamment de la lecture, on ouvre, imprime, sauvegarde, convertir en PDF des fichiers excel On fait des FTP */ } } public MonService : ServiceBase { public MonService() { ServiceInstaller si = new ServiceInstaller(); si.StartType = ServiceStartMode.Manual; si.DisplayName = "mon service"; si.Description = "Service écoute répertoire"; si.ServiceName = "FolderWatcher"; InitializeComponent(); } protected override void OnStart(string[] args) { FSWatcher.watch(); } protected override void OnShutdown() { } protected override void OnPause() { } protected override void OnContinue() { } protected override void OnShutdown() { } protected override void OnPause() { } protected override void OnStop() { } }
Petite précision, pour le tester, j'ai mis ma class FSWatcher dans un form et au load du form j'ai écrit l'instructionEt ben en interactif, je n'ai aucun problème. C'est juste en mode Service que le bug apparait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part FSWatcher.watch();
Partager