如何在不捕获System.UnauthorizedAccessException的情况下检查Directory是否可访问

时间:2012-07-18 13:38:17

标签: .net directory access-violation

我已经通过网络搜索和搜索,但找不到解决此问题的好方法。

这是我的代码:

protected bool isFileValid(FileSystemInfo ifo)
{
   if (!ifo.Exists || ifo.Name.StartsWith("$") || ifo.Name.Equals("System Volume Information"))
        return false;
   if(ifo is DirectoryInfo){
        try
        {
           ((DirectoryInfo)ifo).GetFileSystemInfos();
        }
        catch (Exception e) { LogUtil.Debug("Exception in isFileValid" + e.Message); return false; }
   }
   return true;
}

有没有办法检查我是否可以访问目录而不是尝试捕获异常?这种方法的问题在于,如果有许多我无法访问的目录,它会变得很慢。

“访问目录”的含义是GetFileSystemInfos()无异常调用。我的应用程序为每个isFileValid调用FileSystemInfo,以确定它是否可以按照我描述的方式访问。

提前感谢任何想法如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

您可以尝试查看DirectoryInfo.Exists属性(documentation link

  

如果在尝试时发生任何错误,则Exists属性返回false   确定指定的文件是否存在。这种情况可能发生   引发异常,例如传递带有无效的文件名   字符或字符太多,磁盘失败或丢失,或 if   来电者无权阅读该文件。

(重点是我的)。

所以这是一个简单的例子:

var di = (DirectoryInfo)ifo;
if(di.Exists)
{
    di.GetFileSystemInfos();
}

编辑:听起来你有环境变量在起作用。在调用此方法之前的某个地方,我猜你从文件路径创建FileSystemInfo,存储在字符串中。你需要像这样扩展它:

string expandedFilePath = Environment.ExpandEnvironmentVariables(filePath);

从此创建FileSystemInfo之前。

http://msdn.microsoft.com/en-us/library/system.environment.expandenvironmentvariables.aspx