2013-09-28 103 views
1

奇怪的是,我在调用GetDirectories()方法时偶尔遇到错误。方法Directory.GetDirectories失败

当我们的IT部门远程将某些文件夹移动到本地计算机时,就开始发生这种情况。只有在使用C#浏览这些文件夹时才会出现此错误。

错误信息:“访问路径 'C:\用户\ XXXX \ XXXXX被拒绝'

代码:

public static string[] GetDirectoryInfo(string path) 
{ 
    if (Directory.Exists(path)) 
    { 
     //This call is failing on the new folder. 
     return Directory.GetDirectories(path); 
    } 
    return new string[0]; 
} 

不是很复杂,正确吗?

使用Windows资源管理器导航时,该文件夹不存在。

在CMD提示符下,我可以将目录更改为此文件夹;跟着DIR命令,我得到错误'找不到文件'。

我在猜测 这个问题是一个Win32问题,当文件夹被移动时没有得到清理。我不知道如何纠正这个问题,除了挖掘反编译的System.IO类;如果我没有得到解决方案,我会这样做。

+0

你找不到文件的错误,但你说的到您的计算机。我很困惑。如果文件夹在资源管理器中可见,请检查权限,否则我认为ILSpy是找出错误原因的最佳选择。 – ohmusama

+0

不,有问题的文件夹在资源管理器中不可见。权限不是问题,这是我检查的第一件事。我一直在寻找新的工具,所以我会检查出ILSpy。谢谢。 – user2825489

+0

权限是问题所在。请IT部门为您解决这个问题。 –

回答

0

当软件试图访问已经由Windows出于安全原因,例如像受限制的文件夹,就会出现此:

C:\Users\Default (This path is not accessible by your code) 

另一个原因是您的应用程序试图访问它们是不是真正的文件夹像

My Music 
My Pictures 

文件夹,如果你想读在特定的驱动器的所有文件夹,那么你可以做一些例外来处理这些目录,另一件事可以帮助你是运行应用程序的administra TOR。

2

您的代码可能试图访问您的帐户/角色无法访问的隐藏文件夹。

最简单的办法是赶UnauthorizedAccessException,只是吃它,所以它基本上是跳过的目录,如:

public static string[] GetDirectoryInfo(string path) 
{ 
    if (Directory.Exists(path)) 
    { 
     try 
     { 
      //This call is failing on the new folder. 
      return Directory.GetDirectories(path); 
     } 
     catch(UnauthorizedAccessException unAuthEx) 
     { 
      // Do nothing to eat exception 
     } 
    } 
    return new string[0]; 
} 
+0

是的,这将是最简单的,它已经实施,直到(如果)我能找到解决方案。我想保持简单的问题,但所涉及的文件夹是在移动过程中被删除某处的Environmental.SpecialFolders,并且映射仍然存在(猜测)。这是我需要删除的。 – user2825489