Windows 7库和目录结构

时间:2013-01-08 19:19:35

标签: c# winforms windows-7 directory-structure .net

我正在使用目录及其子目录加载树视图。我打电话给:

string[] dirs = Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));

返回我想要的所有目录和一些我不喜欢的...像无法访问/虚拟'我的音乐'我的视频'等...我当然不能由于库结构(访问被拒绝)......在这些目录中进行任何递归...

如何避免填充这些无法访问的目录?如果操作系统是Vista或7,我可以遍历数组并删除不需要的目录,并留给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;
    }

1 个答案:

答案 0 :(得分:1)

这些目录似乎都是隐藏的并且具有ReparsePoint属性(要求它们为空,请阅读this以获取来自msdn和What is the best way to check for reparse point in .net (c#)?的更多信息,以了解它是如何完成的。

我可以理解需要搜索优雅的代码,但问题是,你可以迭代每个目录并检查这个属性,然后跳过将它添加到数组或目录列表中但是imho不如迭代那么优雅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);
    }
}