Avatar billede lajer Nybegynder
27. december 2005 - 21:48 Der er 11 kommentarer og
1 løsning

Finde hvilken "root"-folder FileSystemWatcher kigger på.

Hej

Jeg har brug for at finde ud af hvilken "root"-folder en FileSystemWatcher kigger på, i min Changed event.

Jeg har prøvet at caste [Object sender] til FileSystemWatcher og tage dens Path property - men, hvis eventen bliver fyret fra en undermappe, så for jeg undermappen med i denne propety.

Ligeledes for jeg selvfølgelig undermappen med, hvis jeg tager Fullpath propetien på [FileSystemEventArgs e]

Jeg havde håbet at jeg måske var en Tag property på watcheren, så jeg kunne sætte "root" på watcheren her - men der er ingen tag på FileSystemWatcher. Så hvad er der så af muligheder?

Mvh
Torben
Avatar billede lajer Nybegynder
27. december 2005 - 21:53 #1
Til admins, hvis nogen læser med:

Jeg savner lidt en mulighed for redigere indlæg/spørgsmål... eventuelt bare en mulighed for at kunne redigere inden for 5 min.

Sidste afsnit i mit spørgsmål var jo simpelthen så fyldt med stave/grammafejl at det halve kunne have været nok :) Kunne selvfølgelig have læst det igennem først - men alligevel, det kunne altså være en rar feature.
Avatar billede Slettet bruger
28. december 2005 - 06:15 #2
Du tager e.FullPath, altså fullpath fra FileSystemEventArgs. Og så finder du den tekst, som svare til root dir, hvor du kunne bruge noget RegEx som den her:

^[^\\]*\\([^\\]+)\\

Alternativt kan du bruge DirectoryInfo klassen til at skaffe den information fra en path.
Avatar billede lajer Nybegynder
28. december 2005 - 18:47 #3
Jeg kan ikke se hvordan den vil virke. Problemet er jo netop, at jeg ikke kan finde root dir? e.FullPath kan jo være 10 undermapper inde i den mappe som min FileSystemWatcher kigger på.
Avatar billede Slettet bruger
28. december 2005 - 19:15 #4
En fullpath kunne være

c:\noget\et eller anden\lidt mere\og endelig filen.txt

Hvsi jeg forstår dig ret er det noget i ovenstående du ønsker ikke?
Avatar billede lajer Nybegynder
28. december 2005 - 19:27 #5
Det er korrekt.

Lad os sige at min FileSystemWatcher holder øje med mappen:

"c:\noget\et eller anden\"

Nu bliver filen "c:\noget\et eller anden\lidt mere\og endelig filen.txt" ændret, og min Changed event bliver fyret. Det jeg vil nu, er at få fat i "c:\noget\et eller anden\" fra FileSystemWatcheren.
Avatar billede Slettet bruger
28. december 2005 - 19:33 #6
Ok bare lige for at være sikker. Du vil altså have den Path, som din FileSystemWatcher overvåger?

I givet fald er det letteste vel bare at sørger for at den klasse, som modtager eventen kender den? Men det er der måske en grund til at den ikke kan eksempelvis at den modtager fra flere FileSystemWatcher's?
Avatar billede lajer Nybegynder
28. december 2005 - 19:44 #7
Lige præcis.
Der er x antal FileSystemWatchers, der alle bliver lavet dynamisk. Så, nu er jeg stuck :-)
Avatar billede Slettet bruger
28. december 2005 - 20:43 #8
Ok, bare af nysgerighed hvad skal du bruge Watch path til, side du ikke kan klare dig med FullPath ?
Avatar billede lajer Nybegynder
28. december 2005 - 22:07 #9
Kræver måske lidt forklaring, men jeg kan prøve.

Det jeg skal bruge, er alle de undermapper, som ligger under den mappe som FSW kigger på.

Altså, hvis FSW kigger på:
"C:\tester\"

og filen "C:\tester\mappe1\mappe2\mappe3\fil1.txt" ændres. Så skal jeg have have extracted "\mappe1\mappe2\mappe3\".

Ved ikke om det gav mening!?

Alle forslag modtages, smid endelig noget brainstorming :-)
Avatar billede Slettet bruger
29. december 2005 - 07:52 #10
Måske et lidt dumt spørgsmål men hvad kan du bruge den oplysning til, mener bare hvis du skal noget med file så er fullpath jo toppen, ok men du behøver ikke forklare sikkert bare mig der mangler fantasi ;)

Et bud på en løsning kunne være at du laver en specialisering af FileSystemWatcher og giver den en property, som eksempelvis watchedFolder, så kunne du i teorien caste "object sender" i eventen og læse egenskaben. Det er et skud men det kunne fungerer...
Avatar billede lajer Nybegynder
02. januar 2006 - 19:17 #11
hmm, nå det var så den med skoven og træerne :)

Smid et svar kryptos.


I øvrigt, hvis det måtte interessere nogen:

    class WatchFolder : System.IO.FileSystemWatcher
    {
        public WatchFolder(string p)
        {
            base.Path = p;
            this.RootDir = p;
        }

        private string m_RootDir = string.Empty;
        public string RootDir
        {
            get { return m_RootDir; }
            set { m_RootDir = value; }
        }
    }
Avatar billede Slettet bruger
03. januar 2006 - 05:38 #12
svar ;)
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
Kurser inden for grundlæggende programmering

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