Forum » Programiranje » C#, FileSystemWatcher in branje datotek
C#, FileSystemWatcher in branje datotek
Ziga Dolhar ::
V VS.net 2005 beta 2 poskusno pišem neko malo aplikacijo, ki ob vsaki spremembi datoteke X to datoteko odpre, z njo nekaj stori in jo zapiše nazaj pod drugim imenom. Moje trenutno znanje C#-a je zaenkrat precej šibko, tako da prosim za potrpežljive odgovore ;).
Uporabljam FileSystemWatcher, ki ima kot NotifyFilter nastavljen "LastWrite".
Vendar pa pride pri uporabi različnih programov za urejanje besedilnih datotek do težav. Če namreč odprem filet v Notepadu in ga shranim, potem v prvo [ponavadi, ne pa vedno] "dela" [datoteka se uspešno odpre, obdela, shrani]. Ko pa sprožim fsWatcher_Changed() drugič [v teku delovanja programa], se stvar sesuje:
{"The process cannot access the file 'D:\\development\\web\\projekti\\billing\\@tmpl\\ref\\style.css' because it is being used by another process."}
Konkretno sem uspel ugotovit, da Notepad menda ob shranjevanju sproži kar dva eventa, in medtem ko se prvo procesiranje datoteke še ni uspelo zaključit, se prične izvajat že drugo, ki pa ne dobi dostopa do datoteke.
Nato sem eventu določil še, naj pred pričetkom in po končanem procesiranju malo "počaka":
Že z manjšo številko (npr. 10 ms) se uspem v večini primerov izognit težavi, a še vedno, če ZELO ZELO hitro spreminjatm datoteko in jo shranjujem, uspem program sesut. Tudi s številko 500 se včasih še sesuje, poleg tega pa program rata grozljivo u-počasnjen.
Kako bi to lahko lepše in predvsem boljše rešil?
--
Druga težava je, da če datoteko odprem v Dreamweaverju in jo shranim, do eventa _sploh ne pride_. WTF?
Hvala za pomoč.
Uporabljam FileSystemWatcher, ki ima kot NotifyFilter nastavljen "LastWrite".
Vendar pa pride pri uporabi različnih programov za urejanje besedilnih datotek do težav. Če namreč odprem filet v Notepadu in ga shranim, potem v prvo [ponavadi, ne pa vedno] "dela" [datoteka se uspešno odpre, obdela, shrani]. Ko pa sprožim fsWatcher_Changed() drugič [v teku delovanja programa], se stvar sesuje:
{"The process cannot access the file 'D:\\development\\web\\projekti\\billing\\@tmpl\\ref\\style.css' because it is being used by another process."}
Konkretno sem uspel ugotovit, da Notepad menda ob shranjevanju sproži kar dva eventa, in medtem ko se prvo procesiranje datoteke še ni uspelo zaključit, se prične izvajat že drugo, ki pa ne dobi dostopa do datoteke.
Nato sem eventu določil še, naj pred pričetkom in po končanem procesiranju malo "počaka":
private void fsWatcher_Changed(object sender, System.IO.FileSystemEventArgs e) { //System.Threading.Thread.Sleep(500); bool result = process(); //System.Threading.Thread.Sleep(500); }
Že z manjšo številko (npr. 10 ms) se uspem v večini primerov izognit težavi, a še vedno, če ZELO ZELO hitro spreminjatm datoteko in jo shranjujem, uspem program sesut. Tudi s številko 500 se včasih še sesuje, poleg tega pa program rata grozljivo u-počasnjen.
Kako bi to lahko lepše in predvsem boljše rešil?
--
Druga težava je, da če datoteko odprem v Dreamweaverju in jo shranim, do eventa _sploh ne pride_. WTF?
Hvala za pomoč.
https://dolhar.si/
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | VB.net Excel v TifOddelek: Programiranje | 1144 (1043) | saule |
» | Spremljanje dogajanja na ekranuOddelek: Programiranje | 1258 (1117) | boss-tech |
» | pošiljanje SMS C#Oddelek: Programiranje | 3122 (2615) | Neon87 |
» | [VB] Komunikacija s serijskimi napravamiOddelek: Programiranje | 2299 (1573) | mNeRo |
» | Visual basic in pavzaOddelek: Programiranje | 820 (774) | Fim |