Thread: C# Tooltje met FileSystemWatcher
-
25-10-2011, 21:02 #1Approved 9liver
- Registered
- 21/08/02
- Location
- Roeselare
- Posts
- 4,474
- iTrader
- 15 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/35
C# Tooltje met FileSystemWatcher
Hallo
Ik heb een project die na het compileren files moet kopiëren naar een dev server. Eerst had ik een post build event batch file maar ik vond dat onhandig. Ik heb dan een tooltje gemaakt die files kopieert als ze veranderen. .Net heeft daar een FileSystemWatcher voor met handige events.
Het probleem is dat er een rariteit in deze klasse zit (klik) waardoor het event 2 maal gebeurt. Ik heb de indruk dat visual studio tijdens het compileren ook soms rare dingen doet (zoals files veranderen en ze dan direct verwijderen, en ze dan direct terug aanmaken)... dus in combinatie is dat natuurlijk een ambetantigheid.
Ik zou graag de files sowieso maar 1 keer kopiëren. Ik denk bvb om een wrapper te maken rond FilesystemWatcher, die een lijst bijhoudt van files die gewijzigd zijn samen met een timestamp. Op die manier kan je dan zelf bepalen wanneer een event (OnFileChanged) van de wrapper class moet gebeuren.
Of het zelfde principe, maar dan toegepast in de class die zorgt voor het kopiëren ... (in mijn geval Deployer.cs)
Momenteel heb ik de volgende cruciale classes: DeploySource, DeployTarget, MainForm, Deployer
Het is zo dat ik dit geheel momenteel gewoon zijn werk laat doen maar in de front end (mainform) gewoon een filter maak op het displayen van een log. Dit moet natuurlijk veranderen...
Iemand eventueel nog meer ideeën?no votes
-
-
26-10-2011, 10:31 #2
Ik heb ooit nog eens een hot-folder gemaakt hierbij geldt dat:
- worden files toegevoegd moet actie A uitgevoerd worden (WatcherChangeTypes: Created)
- worden files verwijderd, niets doen (WatcherChangeTypes: Deleted)
- worden files bewerkt, actie B (WatcherChangeTypes: Rename, Changed)
Zoals te lezen bij FileSystemWatcher.Changed:
M.a.w. het is enkel een hulp, jij moet de logica er achter steken.Common file system operations might raise more than one event. For example, when a file is moved from one directory to another, several OnChanged and some OnCreated and OnDeleted events might be raised. Moving a file is a complex operation that consists of multiple simple operations, therefore raising multiple events. Likewise, some applications (for example, antivirus software) might cause additional file system events that are detected by FileSystemWatcher.
Dus heb ik twee timers gemaakt van 10s die bij een eerste event in gang geschoten worden. Bij een herhaalde event wordt de timer gereset en pas als hij afloopt wordt actie A of B uitgevoerd.
Breid je dit systeem nog uit met een eigen component die ook delegates naar gelijk welke functie aanvaard heb je het systeem dynamisch genoeg gemaakt.no votes
-
26-10-2011, 21:44 #3Approved 9liver
- Registered
- 21/08/02
- Location
- Roeselare
- Posts
- 4,474
- iTrader
- 15 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 1/35
OK, thanks. Ik zal het ook zo doen ...
Mijn eigen FileSystemWatcher die erft van System.IO.FileSystemWatcher
met "new" OnEvent functies, een timer en wat interne logica
Leuk ding voor in het weekendno votes
