• 8 odgovora
  • 4.701 pregleda
Timer ili nesto slicno... 06.03.2006. u 16:24 · pre 251 meseci #1
Moram da pratim promene u jednom folderu, tj. da "nadgledam" taj folder za konkretan fajl. Dakle, kada se pojavi fajl test.txt (na primer), trebalo bi da ga iskopiram, i da zavrsim celu pricu.

Probala sam sa Timer, da proverava na svakih 1000 ms (tj. da podize event, pa da u okviru eventa proverava da li postoji ta slika ili ne), ali ne umem da ga "zaustavim" kada nadje taj fajl i iskopira ga. Nastavlja da "okida"....

Mozda ima neki drugi nacin?
Potpis
The important thing is not to stop questioning. Curiosity has its own reason for existing. - Albert Einstein
Re: Timer ili nesto slicno... 06.03.2006. u 20:04 · pre 251 meseci #3
Ja sam skoro pravio neki service za monitoring foldera, pa čisto da ti skrenem pažnju... FileSystemWatcher.Created event okida u trenutku kada fajl počinje da se stvara u nadgledanom folderu... Ako je fajl malo veći, dobićeš exception kada pokušaš da mu pristupiš (radi kopiranja) jer OS još uvek drži lock nad fajlom. Inače, .Net nema nijedan 'fini' način provere da li je neki fajl pod lock-om... Pa, ako ti to bude stvaralo problem, imam neko zaobilazno rešenje koje mi je dao neki lik na MSDN forumu...
Potpis
Oliver 'FAQ' Klaćik
Re: Timer ili nesto slicno... 06.03.2006. u 21:11 · pre 251 meseci #4
Pozdrav,
ja sam bas danas radio sa Timer kontrolom. Inace koristim VB.net 2005, pa je rukovanje sa timerom jako jednostavno. Prevučeš ga na formu, podesiš interval (npr.1000ms) i postaviš gdje očeš da ti se timer uključi
Timer1.Start()
i di da prekine sa odbrojavanjem
Timer1.Stop()
i to je to.
Inače funkciju koju treba izvršiti napraviš u Event-u tick...
Re: Timer ili nesto slicno... 06.03.2006. u 21:12 · pre 251 meseci #5
Citat:
Sandra_G: Probala sam sa Timer, da proverava na svakih 1000 ms (tj. da podize event, pa da u okviru eventa proverava da li postoji ta slika ili ne), ali ne umem da ga "zaustavim" kada nadje taj fajl i iskopira ga. Nastavlja da "okida"....


Za zaustavljanje tajmera
Code:

Timer.Enabled = false;

Praksa još kaže i da se kod timer elapsed eventa obavezno na početku timer zaustavi, zatim izvrši potrebna obrada i na kraju timer startuje ponovo ukoliko je to potrebno da ne bi došlo do blokiranja programa (kada obrada unutar timer elapsed eventa traje duže nego interval tajmera onda dolazi do gomilanja uzastopnih timer elapsed eventa što blokira izvršavanje ostalih stvari... odoh već u offtopic... :)

Što se tiče čitanja fajla i lock-ovanja, probaj nešto na ovu foru:
Code:

int retrycount = 0;
bool iskopiran=false;
while (!iskopiran)
try
{
   ... kod za kopiranje fajla
  iskopiran=true;
}
catch
{
  retrycount++;
  Sytem.Threading.Thread.CurrentThread.Sleep(100);
  if (retrycount>100)
  {
     break;
  }
}

Kod pokušava da kopira fajl 10 sekundi u slučaju da je lock-ovan i ako ne uspe nastavlja sa radom. Ovih deset sekundi bi trebalo da bude dovoljno za manje fajlove, za veće opet verovatno treba više vremena.
Nadam se da sam pomogao.
Pozdrav!
Re: Timer ili nesto slicno... 07.03.2006. u 13:20 · pre 251 meseci #6
FileSystemWatcher - DA.
Ali... nije mi bas najjasniji NotifyFilter property. Koji element bi trebalo da stavim ako zelim da 'nagledam' folder za nastajanje odredjenog fajla?
Kreirala sam event Created, ali uopste ne registruje... Pretpostavljam da ima neke veze sa NotifyFilter property.
I jos nesto... Kako da zaustavim nadgledanje foldera kada nadjem ono sto mi treba?

Hvalaaaaa :D
Potpis
The important thing is not to stop questioning. Curiosity has its own reason for existing. - Albert Einstein
Re: Timer ili nesto slicno... 07.03.2006. u 20:23 · pre 251 meseci #7
Pošto 'hvataš' događaj kreiranja fajla, NotifyFilter ti nije bitan, jer koju god kombinaciju da staviš, radiće. Verovatno ti ne okida jer nisi stavila property EnableRaisingEvents na true. Da jesi, znala bi i kako da onemogućiš hvatanje događaja...
Potpis
Oliver 'FAQ' Klaćik
Re: Timer ili nesto slicno... 10.03.2006. u 09:15 · pre 251 meseci #8
Citat:
Oliver Klaćik: Ja sam skoro pravio neki service za monitoring foldera, pa čisto da ti skrenem pažnju... FileSystemWatcher.Created event okida u trenutku kada fajl počinje da se stvara u nadgledanom folderu... Ako je fajl malo veći, dobićeš exception kada pokušaš da mu pristupiš (radi kopiranja) jer OS još uvek drži lock nad fajlom. Inače, .Net nema nijedan 'fini' način provere da li je neki fajl pod lock-om... Pa, ako ti to bude stvaralo problem, imam neko zaobilazno rešenje koje mi je dao neki lik na MSDN forumu...


Olivere, bas bi mi trebalo to resenje o lockovanju.... Ako nije problem, da mi to prosledis... :) Hvala puno!
Potpis
The important thing is not to stop questioning. Curiosity has its own reason for existing. - Albert Einstein
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme