24. juni 2008 - 14:01Der er
5 kommentarer og 1 løsning
Teste om man kan skrive til fil
Jeg har en fil som jeg skal kunne skrive i, men inden jeg kommer så langt, skal jeg vide om man overhovedet kan skrive til filen.
jeg kan ikke benytte fileInfo.IsReadonly da denne ikke nødvendigvis vil være sat når der eksempeltvis er fjernet write permissions eller filen ligger på en CD-rom.
Er der en måde at teste for skrive-adgang UDEN af forsøge skrivningen?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Det smarteste er bare at prøve at skrive i filen, og håndtere eventuelle fejl.
Hvis du tjekker om brugeren har rettigheder til at skrive i filen, og derefter begynder at skrive, kommer du i en lidt uheldig "race condition" situation. Hvad nu hvis brugeren mister sine rettigheder imellem de 2 kodelinjer, eller et andet program åbner filen og låser den for skrivning? Da kommer der en fejl, hvilket vil betyde at du uanset skal håndtere fejl, hvilket igen vil gøre det første tjek overflødigt.
Mit råd er at forsøge at skrive til filen, og da håndtere de fejl som eventuelt opstår.
Du kan bruge "System.IO.File.OpenWrite" da den har en række exceptions den kommer med hvis der ikke er adgang til den. jeg ved at når du skriver til en fil eller åbner en kan du sætte rettighederne på den som read,write,read/write men er ikke sikker på hvordan man gør for blot at læse disse værdier. De eksempler jeg har set har man blot forsøgt at skrive til filen og fanget en exception hvis der ikke var tilladelse til at skrive til filen. Men skal du bruge det specifikt uden at skrive til den? Hvis du alligevel skal skrive til den så gør ovennævnte men ellers så tror jeg nok man kan læse adgangen via accescontrol men har ikke selv luret hvordan.. Men har heller ikke været nødvendigt.
Ellers kan du måske bruge System.IO.FileStream stream = new System.IO.FileStream("filepath_and_name", System.IO.FileMode.Open, System.IO.FileAccess.Write); Derved skaber du en filestream til filen og checker om du kan åbne filen og om du får fileacces.write, da den ellers vil brokke sig med en exception. Prøv at ligge den i en try-catch og så fang en exception hvis det ikke kan lade sig gøre.
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.