我正在尝试通过应用程序中的特殊文件夹(Environment.SpecialFolder.StartMenu和Environment.SpecialFolder.DesktopDirectory)递归,它适用于英语安装。
但是,我在非英语安装上遇到以下问题:
-
当我使用非本地化路径时,我尝试访问的任何子文件夹都会收到未经授权的访问异常
-
如果我本地化 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 获取随机路径并传递它们来调试您的函数来测试您的函数,查看它们中的哪些有效,哪些无效,看看它是失败的主调用还是递归之一......