Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过非英语操作系统上的SpecialFolder目录递归的异常_C#_.net_Windows_Winapi_Filesystems - Fatal编程技术网

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

C# 通过非英语操作系统上的SpecialFolder目录递归的异常,c#,.net,windows,winapi,filesystems,C#,.net,Windows,Winapi,Filesystems,我试图在我的应用程序中递归一个特殊文件夹(Environment.SpecialFolder.StartMenu和Environment.SpecialFolder.DesktopDirectory),它适用于英文安装 但是,我对非英语安装有以下问题: 当我使用非本地化路径时,对于我尝试访问的任何子文件夹,我都会得到未经授权的访问异常 如果我本地化Environment.GetFolderPath的结果并尝试获取子目录列表,则在本地化路径上会出现一个DirectoryNotFoundExcept

我试图在我的应用程序中递归一个特殊文件夹(Environment.SpecialFolder.StartMenu和Environment.SpecialFolder.DesktopDirectory),它适用于英文安装

但是,我对非英语安装有以下问题:

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

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

  • 原创->C:\Users\tony\AppData\Roaming\Microsoft\Windows\Start菜单

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

    我使用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;
            }
        }
    }
    
    私有静态IEnumerable LocateAppShortcut(字符串目录)
    {
    foreach(directory.GetDirectories(dir)中的字符串目录)
    {
    foreach(Directory.GetFiles(目录“MyApp.appref ms”)中的字符串文件)
    {
    生成返回文件;
    }
    foreach(LocateAppShortcut(目录)中的字符串文件)
    {
    生成返回文件;
    }
    }
    }
    

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

    好的,本地化的系统文件夹只是别名,如果在主驱动器上运行cmd和dir,您将看到“users”文件夹称为“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:\>
    
    C:\>dir
    统一卷----------
    埃尔努梅罗系列卷:---------
    董事会主席:\
    2013年12月10日12:26
    2013年10月6日17:51英特尔
    2014年2月18日14:34 Mis lugares网站
    2013年12月3日17:52英伟达
    2013年8月22日17:22
    2014年2月24日14:35程序文件
    2014年6月12日09:18程序文件(x86)
    2013年9月18日20:41东芝
    2013年10月12日12:42用户
    2014年4月11日15:08窗口
    0存档0字节
    11 dirs 664.620.318.720字节libres
    C:\>
    

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

    是您的程序需要管理员权限吗?@TaW我还尝试以管理员身份运行该程序,但仍然出现错误。@dmck即使以管理员身份运行,也会出现UnauthorizedAccessException?如果是,那就……奇怪了。至于GetFolderPath的本地化结果……您是在法语版本的操作系统上运行,还是只是在英语版本上运行的法语本地化应用程序操作系统的升级?是否存在内部异常?