我正在加载一个包含目录及其子目录的treeview。我的电话是:
string[] dirs = Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));返回所有我想要的目录和一些我不想要的目录...像不可访问的/虚拟的‘我的音乐’,‘我的视频’等…我当然不能在这些目录中做任何递归由于库结构(访问被拒绝)...
如何避免填充这些无法访问的目录?如果操作系统是Vista或7,我可以迭代数组并删除不需要的目录,而将be留给XP...但我想知道是否有更“优雅”的解决方案?
在Wim的帮助下,我想出了这个:
private List<string> MyDocuments()
{
List<string> dirs = new List<string>(Directory.GetDirectories(
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)));
for (int i = 0; i < dirs.Count-1; i++)
{
DirectoryInfo di = new DirectoryInfo(dirs[i]);
if (di.Attributes.HasFlag(FileAttributes.ReparsePoint))
dirs.RemoveAt(i);
}
return dirs;
}发布于 2013-01-09 04:46:27
这些目录看起来既是隐藏的,又有一个ReparsePoint属性(要求它们为空,请阅读msdn和What is the best way to check for reparse point in .net (c#)?中的this了解更多信息,看看它是如何做到的)。
我理解搜索优雅代码的需要,但问题是,您可以遍历每个目录并检查此属性,随后跳过将其添加到数组或目录列表中,但这不如迭代dirs数组、捕获异常并删除条目。所以,简而言之,我会坚持使用:
List<string> dirs = Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)).ToList();
string[] mySubDirs;
for (int i = 0; i < dirs.Count-1; i++)
{
try
{
mySubDirs = Directory.GetDirectories(dirs[i]);
}
catch (Exception)
{
dirs.RemoveAt(i);
}
}https://stackoverflow.com/questions/14222453
复制相似问题