9

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

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

我知道我可以使用获取“我的文档”的位置(但仅适用于当前用户), Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)但这并不能帮助我提前在(可能)多个用户之间进行测试。

我是否需要使用 SHGetKnownFolderPath 之类的东西?

4

3 回答 3

1

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

为这些文件夹创建一个Dictionary<string, string>尽可能多的常用位置(例如,'c:\users[user name]\My Documents'、'd:\users[user name]\My Documents')以及它们的实际位置实际上是,从Environment. 当您遍历目录层次结构时,在此字典中查找目录以查看您是否有条目(如果您使用字典 -StringComparer.InvariantCultureIgnoreCase在构造时使用比较器以避免不得不混淆路径的大小写)。

不过,我不得不说,您最终可能只需要求助于捕获 IO 异常;因为文件夹结构完全是个人的 - 如果我在 Drive D 上有我的 Users\ 文件夹的备份:那么这种方法会让人感到困惑!

于 2010-02-11T23:53:01.380 回答
1

您可以查询注册表项:

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

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

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

一旦你有了这个值,你就可以轻松地测试网络/映射驱动器,这就是我的做法。

于 2010-02-08T15:43:56.060 回答
0

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

String myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
String myDocumentsRoot = Directory.GetDirectoryRoot(myDocumentsPath);
DriveInfo[] info = DriveInfo.GetDrives();
于 2010-02-10T13:34:08.340 回答