测试“我的文档”文件夹重定向

时间:2010-02-08 07:56:11

标签: .net windows special-folders

是否可以在.net中测试文件夹重定向?我不是指重新分析点/交叉点,我的意思是当文件夹(通常是我的文档)被重定向到服务器时。

在这种情况下,如果您正在遍历PC的文件夹系统,则在到达文件夹的本地版本时会遇到IO错误。因此,能够测试My Documents文件夹重定向是有用的,以便能够采取行动(跳过文件夹,跳转到服务器等)。

我知道我可以使用获取“我的文档”的位置(但仅限当前用户) Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)但这并没有帮助我提前(可能)多个用户对其进行测试。

我是否需要使用SHGetKnownFolderPath?

之类的东西

3 个答案:

答案 0 :(得分:1)

您可以查询注册表项:

http://support.microsoft.com/kb/221837

您还可以查询组策略以进行重定向:

http://technet.microsoft.com/en-us/library/cc781907(WS.10).aspx

一旦你拥有了这个值,就可以轻松测试网络/映射驱动器,这就是我的工作方式。

答案 1 :(得分:1)

很难获得100%无错误的解决方案(除了捕获访问权限的异常 - 正如另一个回答者所建议的那样) - 但这是我最好的镜头。

为这些文件夹创建一个尽可能多的常用位置Dictionary<string, string>(例如'c:\ users [用户名] \我的文档','d:\ users [用户名] \我的文档' )以及它们实际所在的实际位置,来自Environment。 当您遍历目录层次结构时,查找此词典中的目录以查看您是否有条目(如果使用词典 - 在构造时使用StringComparer.InvariantCultureIgnoreCase比较器以避免不得不对路径的情况进行处理)。

但是,我必须说,你可能不得不求助于最终捕获IO异常;因为文件夹结构完全是个人的 - 如果我在驱动器D上备份了我的Users \文件夹:那么这种方法会感到困惑!

答案 2 :(得分:0)

我不确定您要达到的目标是什么,您可以在树中的任何位置获取您可能无权进入的目录,因此您无论如何都必须捕获异常。但是,确定您是否正在处理网络驱动器的一种方法可能是将DriveInfo与查询mydocuments文件夹的根目录结合使用。

String myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
String myDocumentsRoot = Directory.GetDirectoryRoot(myDocumentsPath);
DriveInfo[] info = DriveInfo.GetDrives();