通过非英语操作系统上的 SpecialFolder 目录递归的异常



我正在尝试通过应用程序中的特殊文件夹(Environment.SpecialFolder.StartMenu和Environment.SpecialFolder.DesktopDirectory)递归,它适用于英语安装。

但是,我在非英语安装上遇到以下问题:

  1. 当我使用非本地化路径时,我尝试访问的任何子文件夹都会收到未经授权的访问异常

  2. 如果我本地化 Environment.GetFolderPath 的结果并尝试获取子目录的列表,我会在本地化路径上得到一个 DirectoryNotFoundException。本地化路径的示例:

原始 -> C:\用户\托尼\应用程序数据\漫游\Microsoft\Windows\开始菜单

本地化 -> C:\Utilisateurs\tony\AppData\Roaming\Microsoft\Windows\Menu Démarrer

我使用 Environment.GetFolderPath 获取目录,然后使用以下方法搜索特定文件的位置:

private static IEnumerable<string> LocateAppShortcut(string dir)
{
    foreach (string directory in Directory.GetDirectories(dir))
    {
        foreach (string file in Directory.GetFiles(directory, "MyApp.appref-ms"))
        {
            yield return file;
        }
        foreach (string file in LocateAppShortcut(directory))
        {
            yield return file;
        }
    }
}

我正在寻找一种方法,该方法允许我在给定起始目录可以包含重新分析和/或交接点的起点时,通过 Environment.GetFolderPath 返回的目录路径可靠地递归。

AFAIK,本地化的系统文件夹只是别名,如果您运行cmd并目录您的主驱动器,您将看到"users"文件夹被称为"用户",与您的系统语言无关,因此请检查您的路径。我已经确认了这一点,因为我的系统是用西班牙语配置的:

C:>dir
 El volumen de la unidad C es ----------
 El número de serie del volumen es: ---------
 Directorio de C:
10/12/2013  12:26    <DIR>          inetpub
06/10/2013  17:51    <DIR>          Intel
18/02/2014  14:34    <DIR>          Mis lugares Web
03/12/2013  17:52    <DIR>          NVIDIA
22/08/2013  17:22    <DIR>          PerfLogs
24/02/2014  14:35    <DIR>          Program Files
12/06/2014  09:18    <DIR>          Program Files (x86)
18/09/2013  20:41    <DIR>          Toshiba
10/12/2013  12:42    <DIR>          Users
11/04/2014  15:08    <DIR>          Windows
               0 archivos              0 bytes
              11 dirs  664.620.318.720 bytes libres
C:>

我没有足够的数据来诊断您的问题,但是您可以通过从 FolderBrowserDialog 获取随机路径并传递它们来调试您的函数来测试您的函数,查看它们中的哪些有效,哪些无效,看看它是失败的主调用还是递归之一......

最新更新