【问题标题】:Test for "My Documents" folder redirection测试“我的文档”文件夹重定向
【发布时间】:2010-02-08 07:56:10
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: .net windows special-folders


    【解决方案1】:

    您可以查询注册表项:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 我总是会捕获异常,但我希望尽可能预先识别可预测的异常
        猜你喜欢
        • 1970-01-01
        • 2017-09-08
        • 1970-01-01
        • 2014-04-03
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        • 2012-11-24
        • 1970-01-01
        相关资源
        最近更新 更多