【发布时间】:2013-01-08 19:19:34
【问题描述】:
我正在加载一个带有目录的树视图,它是子目录。我的呼吁:
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;
}
【问题讨论】:
-
“无法访问”是什么意思?
-
返回的结构包含“我的文档\\我的音乐” ....这在 vista 和 7 上很重要...如果您尝试访问该路径中的任何内容,您会遇到访问冲突...
-
我应该说“路径”返回...不是结构...
-
这很可能是权利问题。确保您以管理员身份运行 Visual Studio,然后再次运行/调试。 SpecialFolders 不应该再给您带来困难了。
-
No Wim...这不是访问权限...如果您正在运行的 windows vista 或 7 使用上面的代码并看到它返回“我的音乐”,它不在“我的文档”中Vista和7...与Library结构有关...
标签: c# winforms windows-7 directory-structure .net