[Java (/ C++?)] Detecteren van bestands/map veranderingen

Pagina: 1
Acties:

  • Netman768
  • Registratie: Augustus 2001
  • Laatst online: 08-12-2025
Hallo allemaal,

Ik ben bezig met een applicatie die voor mij bepaalde bestanden en mappen moet 'bewaken', en automatisch backuppen als ik die verander. Wat betreft programmeertalen voor die klus is mijn Java-kennis veruit het grootst, vandaar dat ik daarin nu bezig ben om te programmeren.

Er is alleen één onderdeel van de applicatie waar ik nog niet helemaal uitkom, namelijk het detecteren van veranderingen aan de bestanden. Mijn eisen daaraan zijn als volgt:
• Zo cross-platform mogelijk (ik gebruik niet voor niets Java)
• Zo snel mogelijk

Het mooiste zou zijn als er een manier zou zijn om door het OS op de hoogte te worden gesteld van veranderingen aan de bestanden en mappen waar ik op wil letten. Ik weet dat er een Windows-API is die deze zaken implementeert, zoals onder andere hier besproken wordt (met C++). Ik heb met Java nog nooit direct gebruik gemaakt van een Windows-API, maar dat zal vast kunnen en daar kom ik dan wel uit. Het probleem is: dit is een Windows-API, die dus nooit inzetbaar zal zijn voor b.v. Linux of Mac OS.

Een alternatief is om zelf met enige regelmaat de bestanden langs te lopen en te controleren op veranderingen. Dat is alleen wel erg tijdrovend, resource-trekkend en vooral: laat. Het zou erg gaaf zijn als ik real-time zou kunnen detecteren en backuppen.

Dus mijn vraag: weten jullie een manier om real-time op de hoogte te worden gesteld van veranderingen aan bestanden en/of mappen? Is er een methode die dat kan in iig Windows, Linux en Mac OS? Zijn er misschien verschillende methode's voor ieder systeem? Is het uberhaupt mogelijk in Java, of moet ik misschien uitwijken naar C++?

Alvast bedankt voor jullie hulp. :)

Verwijderd

Beetje zoeken op google levert iets op wat misschien kan helpen bij verder zoeken.

SGI heeft blijkbaar een library voor unix gemaakt genaamd File Alteration Monitor, of FAM. Zoeken op die term in combinatie met java levert misschien wat op.

Probleem is dat wat jij wil voor zover ik weet nog geen standaard system call is wat je op de meeste operating systems terug vindt, namelijk een manier om file wijzigingen als event te registreren (of soortgelijke ideeen). Pollen is inderdaad niet de meest mooie manier, en het is zeker een flinke belasting afhankelijk van hoeveel je wil monitoren en hoe vaak je wil pollen.

Is het echt nodig om 'real-time' de veranderingen te detecteren?? Voor wat je beschrijft zou ik makkelijk genoegen nemen met een polling rate van bijv. een halve minuut of iets dergelijks. Zoals ik het lees zou het niet bepaald een ramp zijn als wijzigingen van 30 seconden voor een crash verloren gaan, maar dat weet je zelf het beste neem ik aan.

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Deze tip ziet er wel bruikbaar uit.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • Johnny
  • Registratie: December 2001
  • Laatst online: 15:37

Johnny

ondergewaardeerde internetguru

Of deze, maar die werkt alleen onder Windows :( http://www2.hawaii.edu/~q...leSystemWatcher.java.html

[ Voor 19% gewijzigd door Johnny op 09-04-2006 12:01 ]

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Verwijderd

Mijn Javaboeken liggen spijtig genoeg 50 km ver weg, maar in Java bestaan er wel degelijk klassen die files in't oog houden. En veranderingen dan met events terug geven. Alleen even zoeken dus welke klassen juist. Of me volgende week een mailtje sturen, dan zoek ik het wel even op :).

  • Red devil
  • Registratie: December 1999
  • Laatst online: 16:46
org.apache.log4j.helpers.FileWatchdog

Deze gebruik ik altijd, je kunt de polling interval instellen en natuurlijk de acties die volgen op een verandering. Werkt erg goed.

  • Netman768
  • Registratie: Augustus 2001
  • Laatst online: 08-12-2025
Dank jullie allemaal voor jullie suggesties, veel bruikbaar spul!

Het is inderdaad niet perse nodig dat er realtime geupdate wordt, maar het is wel zo mooi. Aangezien mijn Google-zoektochten geen algemene detectie-methode hadden opgedoken was ik al bang dat die er niet zou zijn, maar ik weet bijvoorbeeld dat naast Windows, MacOS ook iets in de richting zal hebben: Spotlight (die zoek-tool) ziet binnen een seconde als je wat voor bestand dan ook op de schijf verandert. Is er toevallig iemand die weet hoe dat gaat?

In ieder geval bedankt voor de ideeen tot nu toe. :)

  • kdekker
  • Registratie: Januari 2005
  • Niet online
Wat ik zelf weleens doe: (md5) checksum berekenen per file, of zelfs hele directory structuur, net hoe efficient je het wilt, dat 1x in de zoveel tijd doen, en dan bij verschillen acties ondernemen. Het berekenen van een checksum moet makkelijk zat zijn.

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Voor linux heb je hiervoor dnotify of de opvolger inotify. inotify tutorial
Geen idee hoe MacOS dit doet.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • Netman768
  • Registratie: Augustus 2001
  • Laatst online: 08-12-2025
zwippie schreef op maandag 10 april 2006 @ 11:48:
Voor linux heb je hiervoor dnotify of de opvolger inotify. inotify tutorial
Geen idee hoe MacOS dit doet.
Kijk, fantastisch! Ik had dus echt geen idee dat zoiets uberhaupt bestond! Heel fijn! :)

Nou inderdaad alleen MacOS nog uitvogelen. :)

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 17:28
zwippie schreef op maandag 10 april 2006 @ 11:48:
Voor linux heb je hiervoor dnotify of de opvolger inotify. inotify tutorial
Geen idee hoe MacOS dit doet.
Ik zou persoonlijk niet op die laag gaan programmeren, maar het een laag hoger zoeken en gamin gaan gebruiken. Die API is wat gebruiksvriendelijker en borduurt voort op FAM. Als belangrijke toevoeging heeft Gamin ondersteuning voor inotify in de Linux- kernel, iets wat FAM (nog) niet heeft voor zover ik weet.

[ Voor 12% gewijzigd door Jaap-Jan op 11-04-2006 01:00 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • Netman768
  • Registratie: Augustus 2001
  • Laatst online: 08-12-2025
Ik heb door de nuttige linkjes hier nog wat nieuwe zoektermen kunnen verzinnen om los te laten op Google. Daar kwam in ieder geval nog één nuttige link uit. Dat is een applicatie die dezelfde techniek gebruikt als Spotlight bijvoorbeeld doet (en dus helaas ook niet werkt op lager dan MacOS 10.4). Frustrerend genoeg staat er op het eind, waar je een linkje naar de sourcecode verwacht: "The source for fslogger, along with a discussion of its working, will be available either in, or as a supplement to, my upcoming book on Mac OS X internals."

Grrr. :P

[edit] Het is geen codevoorbeeld oid, maar de info in deze pdf is ook wel praktisch, en de manual van kqueue ziet er ook veelbelovend uit. Helaas is dit allemaal C-gericht, wat dus weer gedoe gaat geven om 't in Java te krijgen. Maargoed, het is iets. :)

[ Voor 24% gewijzigd door Netman768 op 11-04-2006 02:20 ]

Pagina: 1