Avatar billede duns Nybegynder
01. juli 2008 - 10:43 Der er 8 kommentarer og
1 løsning

check folder access

hej eksperter.
Jeg vil gerne tjekke i en mappe om den bruger som er logget in i windows har adgang til undermapperne på serveren i fx p:\fisk\software\

Hvordan gøres dette nemmeste. Jeg har søgt en del på google og fundet noget, men bare ikke liiige som jeg kan få til at virke.

Om man køre et tjek på mapperne eller "tester" ved at prøve at åbne mappen er lige meget bare det virker, og brugeren ikke lægger mærker til det.

Håber i kan hjælpe :D
Avatar billede aaberg Nybegynder
01. juli 2008 - 11:16 #1
Dette er en meget simpel måde at gøre det på:

try
{
  new DirectoryInfo("p:\\fisk\\software").GetFiles();
  //Kommer du hertil, har du læserettigheder.
}
catch (IOException ex)
{
  //Kommer du hertil, har du enten ikke rettigheder, eller mappen findes ikke.
}
Avatar billede duns Nybegynder
01. juli 2008 - 11:41 #2
Ja den virker faktisk ok, men ville jo gerne tjekke ALLE de mapper igennem Photoshop, visio osv som ligger i mappen software og så få lavet en liste med hvilke man har adgang til.
Fik nok forklaret lidt skidt før :/
Avatar billede aaberg Nybegynder
01. juli 2008 - 12:18 #3
new DirectoryInfo("p:\\fisk\\software").GetDirectories();

Denne metode henter alle subdirectories. Så vidt jeg ved, vil denne metode kun returnere directories som du har rettigheder til at se.
Avatar billede duns Nybegynder
01. juli 2008 - 13:13 #4
Well, det virker sådan set med GetDirectories();, men den viser alle mapperne også dem man ikke kan gå ind i :/
Hvad er så nemmmest nu, at åbne alle mapperne som man nu har i en liste og teste for fejl :D ?
Avatar billede aaberg Nybegynder
01. juli 2008 - 13:39 #5
Dette virker, men giver rimelig dårlig performance.

public List<DirectoryInfo> GetSubDirsWithAccess(string directory)
{
    List<DirectoryInfo> dirsWithAccess = new List<DirectoryInfo>();

    DirectoryInfo[] subDirs = new DirectoryInfo(directory).GetDirectories();

    foreach (DirectoryInfo dir in subDirs)
    {
        try
        {
            dir.GetFiles();
            dirsWithAccess.Add(dir);
        }
        catch (IOException)
        {
        }
    }

    return dirsWithAccess;
}
Avatar billede duns Nybegynder
01. juli 2008 - 13:47 #6
takker
hvis du lige opretter et svar får du points :D
Avatar billede aaberg Nybegynder
01. juli 2008 - 13:49 #7
Tak :-)
Avatar billede duns Nybegynder
01. juli 2008 - 13:56 #8
vil det være hurtigere at bruge
StringCollection dirsWithAccess = new StringCollection();
og så
try
        {
            dir.GetFiles();
            dirsWithAccess.Add(dir.name);
        }
cath...

Når du snakker preformance ?
Avatar billede aaberg Nybegynder
01. juli 2008 - 14:08 #9
Det kan du teste lidt på, men jeg tror ikke det vil give noget særlig performanceforbedring. Grunden til at det giver lidt dårlig performance, er at alle filerne i mapperne bliver hentet ud, selvom dette principielt ikke er nødvendigt.

Jeg synes du skal teste performance på koden. Hvis den er god nok til det du lager, så er det ikke sikkert det kan betale sig at rode mere med det. Hvis det ikke er godt nok, kan det være der findes en eller anden hurtigere metode.

Jeg har set mange spørgsmål der går på dette, og jeg har aldrig set nogen komme med en bedre løsning end bare at bruge try-catch.
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