Archief - C# Tooltje met FileSystemWatcher

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

SideShow

Legacy Member
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?

Fraggie

Legacy Member
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:
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.

M.a.w. het is enkel een hulp, jij moet de logica er achter steken.

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.

SideShow

Legacy Member
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 weekend
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan