Windows 7库和目录结构

本文关键字:结构 Windows | 更新日期: 2023-09-27 17:51:11

我正在加载一个目录树视图和它的子目录。我的呼叫:

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

返回所有我想要的目录和一些我不想要的目录…比如无法访问/虚拟的"我的音乐"、"我的视频"等等……当然,由于Library结构(Access denied),我不能在这些目录中做任何递归…

如何避免填充这些不可访问的目录?如果操作系统是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;
    }

Windows 7库和目录结构

这些目录似乎都是隐藏的,并有一个ReparsePoint属性(要求他们是空的,阅读这从msdn和什么是最好的方法来检查重解析点在。net (c#)?看看它是怎么做的)。

我可以理解搜索优雅代码的需要,但问题是,您可以遍历每个目录并检查此属性,随后跳过将其添加到目录数组或列表中,但我认为这比迭代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);
    }
}