2012-03-20 75 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