abcd423417984 Skrevet 10. mars 2009 Del Skrevet 10. mars 2009 Hei Jeg har lagd et lite program for å kopiere noen filer, men av naturlige årsaker klarer den ikke å kopiere ut enkelte filer pga tilgangsrettigheter. Jeg finner filene med å bruke DirectoryInfo.GetFiles() på en bestemt folder, som returnerer en array av FileInfo objekter. Når jeg får denne arrayen så itererer jeg denne og bruker FileInfo.CopyTo for å kopiere de. Problemet er at når jeg ikke har tilgang så får jeg UnauthorizedAccessException. Grunnet hvordan koden min er bygd opp kunne jeg tenke meg å sjekke hvorvidt jeg har tilgang eller ikke FØR jeg i det hele tatt prøver å kopiere, og dermed unngå å få exception. Jeg finner alikevel ingen metode eller property for dette. Er det noen som har peiling på hvordan jeg kan løse dette? Trenger ikke vite HVEM som har tilgang, kun hvorvidt programmet har lesetilgang eller ikke. Setter enormt stor pris på all hjelp. Lenke til kommentar
Ducktoy Skrevet 10. mars 2009 Del Skrevet 10. mars 2009 ikke at jeg er noe flink i .net, og det er lenge sida jeg har programmert.. men det virker som at en try-catch blokk hadde vært ypperlig å kjørt iterasjonen gjennom.. Using the Try/Catch Block to Catch Exceptions Lenke til kommentar
abcd423417984 Skrevet 10. mars 2009 Forfatter Del Skrevet 10. mars 2009 ikke at jeg er noe flink i .net, og det er lenge sida jeg har programmert.. men det virker som at en try-catch blokk hadde vært ypperlig å kjørt iterasjonen gjennom.. Using the Try/Catch Block to Catch Exceptions Det er dette jeg ønsker å unngå. Lenke til kommentar
GeirGrusom Skrevet 10. mars 2009 Del Skrevet 10. mars 2009 Etter det jeg vet må du enten prøve, bruke System.File.GetAttributes eller System.File.GetAccessControl for å sjekke. Lenke til kommentar
Glenn F. Henriksen Skrevet 11. mars 2009 Del Skrevet 11. mars 2009 Det er dette jeg ønsker å unngå. Hvorfor ønsker du å unngå det? Veldig ofte når noen spør om hvordan man kan gjøre en konkret ting er mulig å gå et par hakk tilbake og finne en bedre måte å gjøre hele greiene på, derfor spør jeg. Lenke til kommentar
Wubbable Skrevet 11. mars 2009 Del Skrevet 11. mars 2009 Det er dette jeg ønsker å unngå. Hvorfor ønsker du å unngå det? Fordi det å throwe exceptions er DØDSTREIGT... Prøv for deg selv: Dim S As New Stopwatch S.Start() For i As Integer = 1 To 1000 Try Throw New Exception("") Catch ex As Exception End Try Next MessageBox.Show(S.ElapsedMilliseconds) Lenke til kommentar
GeirGrusom Skrevet 11. mars 2009 Del Skrevet 11. mars 2009 Det går betydelig bedre når du kompilerer til release, men exceptions er forholdsvis tregt, derimot er det ikke så tregt i dette tilfellet at brukeren vil merke det når programmet er kompilert release og ikke kjører under debug. Lenke til kommentar
Wubbable Skrevet 11. mars 2009 Del Skrevet 11. mars 2009 18 millisekund (kompilert) vs 2859 millisekund (debug) (På 1000 exceptions) Hadde aldri trodd forskjellen skulle være SÅ stor. Lenke til kommentar
BennyXNO Skrevet 13. mars 2009 Del Skrevet 13. mars 2009 Jeg er enig med Wubbable her, men av ulike årsaker. Når du vet hva som genererer et exception, så kan du ta steg for å unngå at de skapes. Å da ta høyde for exceptions du kan unngå er dårlig praksis. Exceptions er for uforutsette ting. Lenke til kommentar
Glenn F. Henriksen Skrevet 13. mars 2009 Del Skrevet 13. mars 2009 Vel, dårlig praksis vet jeg ikke. Exceptions er en veldig grei måte å varsle om feil oppover i lagene dine. Kodemessig er det en god praksis å bruke exceptions fremfor å returnere og håndtere obskure feilkoder fra funksjoner. Med mindre man skriver all koden i UI laget, noe som neppe kan regnes som noen god praksis. 2000 milisekunder, dvs 2 sekunder ekstra på å kopiere 1000 filer. Vel, tror ikke det er de to sekundene som er den største tidstyven. Alternativet er ikke gratis det heller. Hvor lang tid tar det å sjekke rettighetene på 1000 filer? En annen ting er at man trenger rettigheter for å lese rettigheter på en fil. Hvis man ikke har leserettigheter på en fil er det naturlig å tenke seg at man mangler rettigheter til å lese rettighetene og da får man et exception og er like langt men med litt ekstra kode. Lenke til kommentar
GeirGrusom Skrevet 14. mars 2009 Del Skrevet 14. mars 2009 Jeg er enig med Wubbable her, men av ulike årsaker. Når du vet hva som genererer et exception, så kan du ta steg for å unngå at de skapes. Å da ta høyde for exceptions du kan unngå er dårlig praksis. Exceptions er for uforutsette ting. Jeg er enig i at en skal unngå exceptions om mulig og praktisk, men jeg vet ikke om det er noen enkel vei utenom exceptions i dette tilfellet. Lenke til kommentar
abcd423417984 Skrevet 14. mars 2009 Forfatter Del Skrevet 14. mars 2009 Hensikten i mitt tilfelle er ikke bare for å unngå exceptions men for å unngå unødvendige rekursive kall (dvs vil gjerne sjekke hvorvidt det er noe poeng å gå et steg lengre inn i rekursjonen). Men hvis det ikke er til å unngå er det helt OK. Bare trengte å vite det. Lenke til kommentar
BennyXNO Skrevet 14. mars 2009 Del Skrevet 14. mars 2009 Hvis man tenker filtre her, så er det lett å unngå exceptions var filer = AlleFilerIGittKatalog(katalog).HvorBrukerHarRettigheter(); Det viktige her er å skille funksjon. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå