Avatar billede thepsypher Nybegynder
21. maj 2010 - 12:32 Der er 5 kommentarer

Problemer med FileSystemWatcher

Hej udviklere.....

Mit spørgsmål er egentlig ret simpelt, men løsningen nok knap så simpel.

Vil gerne kunne overvåge en specifik fil og hvis den så er blevet gemt/ændret, så skal den så poppe op med en messagebox (fyre et event af). Hvordan kan jeg mon opnå dette?

Lige nu arbejder jeg med FileSystemWatcher og der er visse ulemper.

Bl.a. fyrer den ofte evntet af 2 gange efter hinanden, måske fordi den laver flere mærkelige ting/skrivninger på harddisken end hvad jeg ved af.

Nogle applikationer (såsom Word2007) har temp-filer ved siden af, hvor der gemmes i og derefter bliver den gemte temp-fil renamed til den fil jeg overvåger og derved fyres LastWrite-eventet aldrig af? :-(

Nogen som har nogle gode idéer?

Hilsen Psypher.
Avatar billede martchap Nybegynder
25. maj 2010 - 23:17 #1
Hej Psypher

Jeg ville lave en timer som fyrer med et bestemt interval (udfra hvor vigtigt det er at ændringen hurtigt bliver opdaget, måske 10 sek?), lav et FileInfo objekt på filen, læs hvornår den sidst er ændret, gem så denne information i en variabel, og næste gang timeren fyrer tjekker du så om ændringstidspunket i FileInfo klassen har ændret sig siden sidst, og handler derefter.

Martin
Avatar billede winners79 Nybegynder
26. maj 2010 - 12:16 #2
Grunded til at du får flere events er at nogle applikationer så som notepad skriver mere end 1 gang til filen. Du kan jo kode noget specifikt til word dokumenter hvis det er dem du skal overvåge, f.eks med et rename event som du selv nævner.

Hvad skal det bruges til? noget specifikt eller super generelt?
Avatar billede thepsypher Nybegynder
27. maj 2010 - 12:46 #3
Koden bruges i en winform applikation hvor brugeren snakker med en database/server, hvor brugeren så kan hente specifikke dokumenter ned på sin computer.
Nogle gange bliver de bare læst og skal ikke redigeres, men andre gange redigeres de og der skal den så kunne poppe op med "Dokumentet er blevet ændret! Vil du lægge den nye version op på serveren".

Det optimale er derfor at den kan poppe op med det samme og gerne oveni den applikation som lige har gemt filen (TopMost) og se bort fra double-events (og i så fald ignorere dem).

En anden mulighed kunne være når man vender tilbage til min applikation (GotFocus), så vil den fortælle at dokumentet er blevet ændret siden det blev hentet ned.

Hilsen
Psypher
Avatar billede winners79 Nybegynder
28. maj 2010 - 09:54 #4
Er det altid Office dokumenter?

Fordi så ville det være oplagt at bruge VSTO (Visual studio Tools for Office) til at lave et plug-in. Dette plug-in kan så når de saver spørge om de vil uploade det ændrede dokument til databasen.
Avatar billede thepsypher Nybegynder
31. maj 2010 - 23:08 #5
Hej igen.

Nej, det er ikke altid Word-dokumenter, men også .pdf-dokumenter og måske andre (som ikke indgår i mine krav endnu i så fald). Derfor stod valget jo lidt i mellem at skrive en generel eller 2 til mange specifikke løsninger.
Jeg valgte den første, også da jeg næsten vidste at der ville komme flere fil-formater til og derfor kunne det blive et stort arbejde i stedet for en generel løsning.
Jeg benytter netop på baggrund af dette FileSystemWatcher.

Overvejer lidt at lade den lytte på filen og hvis den så ændrer sig (en eller flere gange), så når brugeren "kommer tilbage til applikationen" ("gotFocus()"), så kan brugeren blive adspurgt "om den ændrede fil skal uploades til serveren".

Denne løsning kan vidst bruges, da det væsentligste er at brugeren bliver informeret inden denne går i gang med at redigere en ny fil. Så kan man også rigtig nemt bare sætte isChanged og så kan den bare blive sat flere gange hvis applikationer som notepad eller Word trigger multiple events for den samme handling.

Hilsen Psypher
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester