Prawa odczytu katalogow - poratujcie

Odpowiedz Nowy wątek
2007-01-06 21:18
pikseloza
0

Mam taki problem - mam katalog, a raczej sciezke do niego w stringu, i chcialbym sie dowiedziec czy moge ten katalog otworzyc do czytania - konkretnie to czy moge wylistowac sobie jakie w nim sie zawieraja pliki i podkatalogi. Nie potrafie sie doszukac w tym calym MSDN, albo tak zakopali albo ju zprzesiaklem api do Javy, wiec prosze o pomoc doswiadczonych dotnetowcow.

Pozostało 580 znaków

2007-01-06 23:10
0

Sprawdz metode Directory.GetAccessControl().


You need to learn how to walk
before you can run

Pozostało 580 znaków

2007-01-06 23:42
pikseloza
0

I co moge dalej zrobic z taka wartoscia pobrana? Sory ze tak pytam ale na prawde nie czaje tego C#, jakies dziwne maja pomysly czasami...

Pozostało 580 znaków

2007-01-07 00:24
0

Krotki kurs msdn:

Tu jest opis metody GetAccessControl na msdn
Klikasz sobie na interesujaca Cie wersje metody, dla nas jest to:

Directory.GetAccessControl (String)

Po otwarciu strony dowiadujesz sie, ze dla C# metoda ta zwraca obiekt typu DirectorySecurity:

C#

public static DirectorySecurity GetAccessControl (
string path
)

No to szukasz sobie w przegladarce u gory po prawej tekstu: "DirectorySecurity class", zeby sie dowiedziec co to. Pamietaj o tym, zeby szukac w odpowiedniej przestrzeni nazw (sa tez takie klasy w System.Web.costam). Msdn powinien wyswietlic ja na pierwszym miejscu w wyniku. Po lewej w drzewku wybierasz sobie podkategorie members, zeby zobaczyc co takiego w sobie kryje ten obiekt. Tam znajdujesz ciekawie brzmiaca metode o nazwie GetAccessRules i ponownie zaglebiasz sie w jej tajniki i dowiadujesz sie, ze zwraca obiekt typu AuthorizationRuleCollection. Ponownie wpisujesz sobie w wyszukiwarke tekst: "AuthorizationRuleCollection class". Tu juz nie musisz zaglebiac sie w members, bo jako, ze jest to kolekcja, to bardziej interesuje Cie z czego sie sklada, a nie co mozna na niej robic (pewnie to samo co na wszystkich kolekcjach). Z opisu na samym poczatku dowiadujesz sie, ze jest to kolekcja obiektow typu AuthorizationRule, wiec klikasz sobie na to :) i tam dowiadujesz sie, ze z tego dziedziczy rowniez Access Rule. Z Access Rule dowiadujesz sie, ze ma takie wlasciwosci jak IdentityReference i AccessControlType.

To wszystko pozwala napisac np. taki programik:


using System;
using System.IO;
using System.Security.AccessControl;

namespace Test
{
class Program
{
static void Main()
{

        DirectorySecurity sec = Directory.GetAccessControl(@"C:\program files");
        foreach(AccessRule vRule in sec.GetAccessRules(true, true, (new System.Security.Principal.NTAccount("a").GetType())))
            Console.WriteLine(String.Format("Uzytkownik: {0} Dostep: {1}", vRule.IdentityReference.Value, vRule.AccessControlType));
        Console.Read();
    }
}

}



Ale, jezeli po prostu chcesz sprawdzac czy przy odczytywaniu zawartosci katalogu uda Ci sie to, to mozesz wykorzystac fakt, ze metoda Directoty.GetFiles() w razie braku uprawnien wyrzuca wyjatek UnauthorizedAccessException - skoro czytasz nazwy i taki wyjatek wyskakuje to znaczy, ze nie masz dostepu :)

Mam nadzieje, ze cos wyjasnilo :)

You need to learn how to walk
before you can run

Pozostało 580 znaków

2007-01-07 23:51
pikseloza
0

Prawde mowiac, to ja wymiekam przy tym, nie czaje.
Nie zdarza mi sie to i wiem ze jest to tepione na forum ale tym razem musze to zrobic: mozesz mi napisac kod ktory sprawdzi czy mam pozwolenie na wylistowanie sobie zawartosci katalogu? Cos w stylu jakiegos ifa ktory to ladnie zrobi?
Napiszesz, wielkie dzieki, nie napiszesz, rozumiem, i tak wiele pomogles.

Pozostało 580 znaków

2007-01-08 10:55
0

Najlatwiej bedzie tak jak napisalem pod spodem, czyli:


String [] files;
try
{
files = Directory.GetFiles(@"c:\program files");
}
catch(UnauthorizedAccessException iException)
{
files = null;
}
if(files == null)
Console.WriteLine("Brak uprawnien do wylistowania katalogu");



Ten kod ma ta wade, ze w razie posiadania uprawnien wylistuje od razu katalog, a nie zawsze jest to potrzebne - tracisz wiec troche na szybkosci. Za to jest dosc prosty i zrozumialy.

Postaram sie jeszcze poszukac TYLKO sprawdzania, ale chwilowo nie mam za wiele czasu.

You need to learn how to walk
before you can run

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0