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

时间:2014-03-28 19:48:34

标签: c# .net windows winapi filesystems

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

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

  1. 当我使用非本地化路径时,我尝试访问的任何子文件夹 UnauthorizedAccessException

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

  3. 原始 - > C:\ Users \ tony \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu

    本地化 - > C:\ Utilisateurs \ tony \ AppData \ Roaming \ Microsoft \ Windows \MenuDé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返回的目录路径进行递归。

1 个答案:

答案 0 :(得分:1)

AFAIK,本地化系统文件夹只是别名,如果你运行cmd和dir你的主驱动器,你会看到“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获取随机路径并将它们传递给调试你的函数来测试你的函数,看看哪些工作有效,哪些无效,看看是不是主要的呼叫是失败的还是递归...