2012-03-20 71 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(); 
     } 
    } 
} 

我想測試,如果存取權限被拒絕(字符串路徑) 然後做的GetFiles和所有。

我已經發現了這一點:how can you easily check if access is denied for a file in .NET?

任何幫助嗎?

+0

難道你們就不能只是把它包裹在一個try/catch塊? – 2012-03-20 20:24:22

+0

你可以捕捉異常...如果你有例外=>你沒有訪問... – gdoron 2012-03-20 20:24:34

+0

會捕捉UnauthorizedAccessExceptions太多的開銷,等? – 2012-03-20 20:27:38

回答

5

最簡單的(也是最安全的)選項是隻做你現在正在做的事情,但是把代碼包裝在適當的異常處理中。

然後,您可以趕上UnauthorizedAccessExceptionGetFiles(和潛在的一個SecurityExceptionDirectoryInfo構造,根據路徑上)明確,並把你的處理邏輯存在。

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在我的上下文中不存在,我該怎麼辦? – 2012-03-21 04:24:55

+0

@MátéHomolya:糾正,這是[UnauthorizedAccessException](http://msdn.microsoft.com/en-us/library/system.unauthorizedaccessexception.aspx) – Tigran 2012-03-21 08:19:47

+0

謝謝你們,我用這個try/catch的東西得到它。這對我來說是新的。 – 2012-03-23 16:35:16