我已经通过网络搜索和搜索,但找不到解决此问题的好方法。
这是我的代码:
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
,以确定它是否可以按照我描述的方式访问。
提前感谢任何想法如何解决这个问题。
答案 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