首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows 7库和目录结构

Windows 7库和目录结构
EN

Stack Overflow用户
提问于 2013-01-09 03:19:35
回答 1查看 474关注 0票数 0

我正在加载一个包含目录及其子目录的treeview。我的电话是:

代码语言:javascript
复制
string[] dirs = Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));

返回所有我想要的目录和一些我不想要的目录...像不可访问的/虚拟的‘我的音乐’,‘我的视频’等…我当然不能在这些目录中做任何递归由于库结构(访问被拒绝)...

如何避免填充这些无法访问的目录?如果操作系统是Vista或7,我可以迭代数组并删除不需要的目录,而将be留给XP...但我想知道是否有更“优雅”的解决方案?

在Wim的帮助下,我想出了这个:

代码语言:javascript
复制
    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;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-09 04:46:27

这些目录看起来既是隐藏的,又有一个ReparsePoint属性(要求它们为空,请阅读msdn和What is the best way to check for reparse point in .net (c#)?中的this了解更多信息,看看它是如何做到的)。

我理解搜索优雅代码的需要,但问题是,您可以遍历每个目录并检查此属性,随后跳过将其添加到数组或目录列表中,但这不如迭代dirs数组、捕获异常并删除条目。所以,简而言之,我会坚持使用:

代码语言:javascript
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14222453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档