0

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

这是我的代码:

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由我的应用程序调用 everyFileSystemInfo以确定它是否可以按照我描述的方式访问。

提前感谢您提供解决此问题的任何想法。

4

1 回答 1

0

您可以尝试查看DirectoryInfo.Exists属性(文档链接

如果在尝试确定指定文件是否存在时发生任何错误,Exists 属性将返回 false。这可能发生在引发异常的情况下,例如传递包含无效字符或过多字符的文件名、磁盘故障或丢失,或者调用者没有读取文件的权限。

(强调的是我的)。

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

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

于 2012-07-18T13:43:47.810 回答