我正在尝试通过我的应用程序中的SpecialFolder(Environment.SpecialFolder.StartMenu和Environment.SpecialFolder.DesktopDirectory)进行递归,它适用于英语安装。
但是我在非英语安装上遇到以下问题:
当我使用非本地化路径时,我尝试访问的任何子文件夹 UnauthorizedAccessException
如果我将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;
}
}
}
我正在寻找一种方法,允许我在给定起始目录可以包含重新分析和/或交接点的起点时,可靠地通过Environment.GetFolderPath返回的目录路径进行递归。
答案 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获取随机路径并将它们传递给调试你的函数来测试你的函数,看看哪些工作有效,哪些无效,看看是不是主要的呼叫是失败的还是递归...