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

dmc*_*mck 8 .net c# windows filesystems winapi

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

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

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

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

原始 - > 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 1

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

\n\n
C:\\>dir\n El volumen de la unidad C es ----------\n El n\xc3\xbamero de serie del volumen es: ---------\n\n Directorio de C:\\\n\n10/12/2013  12:26    <DIR>          inetpub\n06/10/2013  17:51    <DIR>          Intel\n18/02/2014  14:34    <DIR>          Mis lugares Web\n03/12/2013  17:52    <DIR>          NVIDIA\n22/08/2013  17:22    <DIR>          PerfLogs\n24/02/2014  14:35    <DIR>          Program Files\n12/06/2014  09:18    <DIR>          Program Files (x86)\n18/09/2013  20:41    <DIR>          Toshiba\n10/12/2013  12:42    <DIR>          Users\n11/04/2014  15:08    <DIR>          Windows\n               0 archivos              0 bytes\n              11 dirs  664.620.318.720 bytes libres\n\nC:\\>\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n