Gå til innhold

Anbefalte innlegg

Jeg skriver for tiden et program, hvor realtime scanning og detektering filer på PC-en er essensielt.

Enkelt forklart fungerer det foreløping slik:

 

1. Programmet starter.

2. Det opprettes en index som inneholder datamaskinens harddisker, hvilke directories hver av disse inneholder, og hvor stort innholdet i hver directory er (ikke rekursivt; altså ikke inkludert sub-dirs,. bare filer i aktuelle dir.).

 

( Dictionary<DriveInfo,Dictionary<DirectoryInfo, long>>(antall_harddisker); )

 

3. Programmet scanner 1 harddisk om gangen for directories, og legger de til i indexen.

4. Deretter kalkuleres hver directory sin individuelle størrelse.

5. Til slutt scannes det for alle filer som matcher et gitt kriterie, og disse legges i en annen liste.

 

Når dette er utført, scanner programmet kontinuerlig etter endring i "ledig plass" på hver harddisk (noe som oppdateres i realtime). Hvis det skjer en endring i en harddisk sin størrelse, rekalkulerer programmet størrelsen på den harddisken sine directories igjen, og finner ut hvilke som har et større/mindre innhold (altså ny fil er lagt til/slettet).

 

Dette fungerer bra; hvis en ny fil legges til hvor som helst på PC-en, finnes denne i løpet av 1-3 sekunder (over 300000 directories). Problemet derimot, er hvis det legges til en ny mappe, ettersom bare mapper som allerede er i index-lista scannes for en endring i størrelse.

 

Spørsmålet er simpelthen; jeg har en liste med alle mapper på PC-en, hvordan skal jeg finne ut om nye mapper er lagt til uten å måtte scanne hele harddisken på nytt for mapper?

 

Vanskelig å uttrykke et stort problem med få ord, så hvis noe var uforståelig/diffust, så er det bare å si ifra.

Lenke til kommentar
Videoannonse
Annonse

FileSystemWatcher gjør akkurat det jeg trenger, og forenkler koden enormt. Takker!

 

Har derimot et nytt spørsmål.

Jeg tenkte å lagre listen over directories i en database, slik at hver gang programmet kjøres (etter første gang) så kan listen hentes derfra, i stedet for å bli generert på nytt. For at dette skal være noe poeng, så må listen i tillegg oppdateres med alle mapper som har blitt opprettet siden programmet sist ble lukket.

 

En måte jeg kom på var å lagre tidspunktet programmet lukkes, og deretter scanne etter mapper som ble opprettet senere enn dette. Problemet med denne måten er at alle mapper må scannes på nytt, så hele poenget med databasen faller bort.

 

Noen som har en lur måte å gjøre dette på; oppdatere en allerede eksisterende liste med mapper uten å gå igjennom hele PC-en på nytt?

Lenke til kommentar
Evt kjøre all indeksering i bakgrunnen slik at programmet er brukbart mens det oppdateres?

Ja, tror nok det blir denne løsningen; første gang programmet kjøres indekseres både mapper og aktuelle filer fullstendig ved oppstart. Alle påfølgende oppstarter lastes disse, GUI-en starter, data visualiseres etc. Oppdatering av nye mapper/filer som har blitt opprettet/slettet mens programmet var av, skjer i bakgrunn.

 

 

Jeg tror nesten du er nødt til å lage en service som passer på slike ting mens programmet ikke er i gang. Denne kan du jo bruke generelt til all indeksering etc. slik at programmet bare kontakter den når det starter, og henter all data derifra.

Definitivt en spennende idé, skal om jeg ikke klarer å implementere dette også etterhvert.

Lenke til kommentar
Evt kjøre all indeksering i bakgrunnen slik at programmet er brukbart mens det oppdateres?

Ja, tror nok det blir denne løsningen; første gang programmet kjøres indekseres både mapper og aktuelle filer fullstendig ved oppstart. Alle påfølgende oppstarter lastes disse, GUI-en starter, data visualiseres etc. Oppdatering av nye mapper/filer som har blitt opprettet/slettet mens programmet var av, skjer i bakgrunn.

 

Hvordan skal du kunne oppdage hvilke mapper/filer som er opprettet/slettet uten å indeksere alt på nytt eller kjøre en test for å sjekke om de finnes? En service høres definitivt ut som den enkleste veien å gå.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...