1. #1
    SideShow's Avatar
    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  

  2. #2
    Fraggie's Avatar
    Registered
    17/07/02
    Posts
    9,537
    iTrader
    3 (100%)
    Mentioned
    0 Post(s)
    Reputation
    4/39
    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.
    no votes  

  3. #3
    SideShow's Avatar
    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 weekend
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in