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