Toon posts:

[Java/C++/VB6] Bestandsmonitoring*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Momenteel ben ik bezig met een systeem waarbij ik ergens mee tegen de lamp loop.

De situatie zit zo in elkaar. Er is een server die levert iedere x seconden een rapportage af. Hij doet dit over een netwerk naar een client PC. Deze client PC is er verantwoordelijk voor dat deze gegevens op het internet belanden. Momenteel worden de geleverde rapportages allemaal handmatig hernoemd. Echter zit er een systeem in de bestandsnaam dus in principe is dit te automatiseren.

Allemaal leuk en aardig... er is echter 1 probleem. Mijn eerste idee was om een programma te draaien welke om de minuut gaat kijken of er ook bestanden bij gekomen zijn. Zo ja, hernoem ze en publish ze op het internet. Dit werkt in principe wel echter is de desbetreffende PC niet meer vooruit te branden.

Wat veel prettiger zou werken is dat windows mij een seintje geeft wanneer er in een directory (welke altijd hetzelfde is overigens) een bestand wordt bij geplaatst. Dan zou ik dan op aanvraag van windows het bestand kunnen hernoemen en vervolgens kunnen publishen.

Ofwel, is het mogelijk een soort van bestandsmonitoring service van windows vast te knopen aan een map zodat die service mij events levert wanneer er een nieuw bestand arriveerd.

Ik het hier nog niets over weten te vinden. Daarnaast zou ik ook niet weten of hier een sjieke term voor is waar ik op kan zoeken. Als iemand mij even een trap in de goede richting kan geven dan zou me dat heel veel haaruitval schelen ;)

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 08:26
Dat kan zeker.
Een voorbeeldje in C#

http://www.c-sharpcorner.com/3/FSWatcherMB.asp
http://www.c-sharpcorner.com/3/FSWatcherDesMA.asp

[ Voor 22% gewijzigd door Kwistnix op 05-06-2005 18:35 ]


Verwijderd

Topicstarter
Vergeten te vermelden...

De 3 talen waarin ik de oplossing kan gebruiken zijn:

- Java
- C++ (Geen .net)
- Visual Basic (Geen .net)

Dit i.v.m. externe componententen :(

[ Voor 1% gewijzigd door Verwijderd op 05-06-2005 18:36 . Reden: Bedankt FallenAngel666, kan ik al heel wat mee _/-\o_ ]


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
Als dat programma zoveel resources vergt, als deze om de minuut checkt dan zit er toch iets goed fout in dat programma! Ik weet niet of je standaard software gebruikt of dat je het zelf hebt geprogrammeerd, maar het is misschien wel verstandig om andere software uit te testen.

If I can't fix it, it ain't broken.


  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 08:26
Als je met Java gaat werken dan zal je JNI moeten gebruiken om de notificaties van Windows op te vangen anders gaat dat nooit lukken.

Eventueel ook de file system monitor in C# maken aan de hand van het eerder geposte voorbeeld en die vanuit Java aanroepen met JNI.

[ Voor 34% gewijzigd door Kwistnix op 05-06-2005 18:43 ]


Verwijderd

Ok, ik ga er van uit dat we hier met winsdows te maken hebben.

Na even zoeken op microsoft.com heb ik hebt volgende gevonden:
An application can monitor the contents of a directory and its subdirectories by using change notifications. Waiting for a change notification is similar to having a read operation pending against a directory and, if necessary, its subdirectories. When something changes within the directory being watched, the read operation is completed. For example, an application can use these functions to update a directory listing whenever a file name within the monitored directory changes."
als het dit is dat je moet hebben:
http://msdn.microsoft.com..._change_notifications.asp

edit:
Vermits hier alles is gebaseerd op API calls zou het zowel onder C++ als onder VB als onder java mogelijk moeten zijn

[ Voor 9% gewijzigd door Verwijderd op 05-06-2005 18:46 ]


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
Als je het in JAVA wilt maken heb je hier misschien wat aan http://www.jniwrapper.com/winpack_features.jsp#filewatch.

If I can't fix it, it ain't broken.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zondag 05 juni 2005 @ 18:34:
Vergeten te vermelden...

De 3 talen waarin ik de oplossing kan gebruiken zijn:

- Java
- C++ (Geen .net)
- Visual Basic (Geen .net)

Dit i.v.m. externe componententen :(
Waarom neem je dan de tag "alg" op in je titel? Kies een titel die overeen komt met datgene wat je wil weten. Ik fix je titel dus even.

Overigens, waarom eindigen al je topictitels op '...'? Dit staat erg vreemd en lijkt me nogal onnodig. Zou je dat in het vervolg niet meer willen doen? :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Verwijderd schreef op zondag 05 juni 2005 @ 18:44:
Ok, ik ga er van uit dat we hier met winsdows te maken hebben.

Na even zoeken op microsoft.com heb ik hebt volgende gevonden:
obtaining_directory_change_notifications
Lijkt me wel he - VB voor Linux laat nog even op zich wachten :X

Maar je hebt idd de goede functies, ik heb ze ook wel eens gebruikt en ze werken 100%.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Verwijderd schreef op zondag 05 juni 2005 @ 18:28:
Allemaal leuk en aardig... er is echter 1 probleem. Mijn eerste idee was om een programma te draaien welke om de minuut gaat kijken of er ook bestanden bij gekomen zijn. Zo ja, hernoem ze en publish ze op het internet. Dit werkt in principe wel echter is de desbetreffende PC niet meer vooruit te branden.
Kun je ook een stukje code laten zien? Om de minuut een lijstje met bestanden doorlopen om te zien of er een bestand is bijgekomen zou vrijwel onmerkbaar in de achtergrond moeten kunnen lopen. Bevat die directory heel veel bestanden? Als er echt systeem in de filenamen zit dit je moet verwerken dan zou ik in Java een FileFilter maken dat de juiste bestanden eruit zeeft en deze verder verwerken.

With the light in our eyes, it's hard to see.


Verwijderd

MSalters schreef op zondag 05 juni 2005 @ 23:07:
[...]

Lijkt me wel he - VB voor Linux laat nog even op zich wachten :X
Sowieso laat linux op zich wachten want er zijn geen (goede) services voor (dnotify is een term die me bij staat maar werkt ook niet optimaal).

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
In principe zou dazuko http://www.dazuko.org/about.shtml dat mogelijk moeten maken. Het wordt bijvoorbeeld ook gebruikt door clamav virusscanner om on-access te scannen.

  • The End
  • Registratie: Maart 2000
  • Laatst online: 08:37

The End

!Beginning

In Windows met C++ zijn er 2 mogelijkheden om veranderingen in een directory op te vangen zonder te pollen:

FindFirstChangeNotification en ReadDirectoryChangesW.

Met ReadDirectoryChangesW kan je precies zien welke file veranderd is en hoe. Met FindFirstChangeNotification kan je alleen zien dat er iets veranderd is in een bepaalde directory (boom).

FindFirstChangeNotification is veel makkelijk te implementeren en die zou ik dan ook gebruiken.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 10:04
Gebruik je een wachtfunctie met een busyloop ofzo? Een directory parsen mag ( zeker de 1 + x keer, x > 0 ) eigenlijk geen tijd meer kosten.

Natuurlijk is een change notification flexer :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1