2012-03-20 1 views
1

Я хочу знать, как я могу проверить, могу ли я получить доступ к строковому пути или нет. Вот код, я использую:Как проверить, запрещен ли доступ к строковому пути?

using System; 
using System.IO; 

namescpace prog1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string path = @"C:\Users\Admin"; 
      DirectoryInfo dir = new DirectoryInfo(path); 
      foreach (FileInfo fil in dir.GetFiles()) 
      { 
       //At dir.GetFiles, I get an error saying 
       //access to the string path is denied. 

       Console.WriteLine(fil.Name); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

Я хочу проверить, если Acces отрицается (для струнного пути) Затем сделайте GetFiles и все это.

Я уже нашел: how can you easily check if access is denied for a file in .NET?

Любая помощь?

+0

Вы можете не просто обернуть его в Try/поймать блок? –

+0

Вы можете поймать Исключение ... Если у вас есть исключение => У вас нет доступа ... – gdoron

+0

Улавливает UnauthorizedAccessExceptions слишком много накладных расходов и т. Д.? –

ответ

5

Простейший (и, как правило, самый безопасный) вариант состоит в том, чтобы просто делать то, что вы делаете сейчас, но обертывать код надлежащей обработкой исключений.

Вы можете поймать UnauthorizedAccessException из GetFiles (и потенциально SecurityException из DirectoryInfo конструктора, в зависимости от пути) в явном виде, и поставить свою логику обработки там.

2

Можно сделать что-то вроде этого:

static void Main(string[] args) 
{ 
    string path = @"C:\Users\Admin"; 
    DirectoryInfo dir = new DirectoryInfo(path); 
    FileInfo[] files = null; 
    try { 
      files = dir.GetFiles(); 
    } 
    catch (UnauthorizedAccessException ex) { 
     // do something and return 
     return; 
    } 

    //else continue 
    foreach (FileInfo fil in files) 
    { 
     //At dir.GetFiles, I get an error saying 
     //access to the string path is denied. 

     Console.WriteLine(fil.Name); 
     } 
     Console.ReadLine(); 
} 
+0

AccessDeniedExpection не существует в моем контексте, что я могу сделать? –

+0

@ MátéHomolya: исправлено, это [UnauthorizedAccessException] (http://msdn.microsoft.com/en-us/library/system.unauthorizedaccessexception.aspx) – Tigran

+0

Спасибо, ребята, я получил его с этой попыткой/уловкой. Это было ново для меня. –