尝试解析CommonDocuments目录时出现了一些奇怪的错误.使用Windows资源管理器(属性 - >上下文菜单中的路径)将CommonDocuments目录重定向/移动到新位置后,它会一直解析到错误的目录.
最小的工作代码是:
namespace CommonDocumentsTest
{
class Program
{
private static readonly Guid CommonDocumentsGuid = new Guid("ED4824AF-DCE4-45A8-81E2-FC7965083634");
[Flags]
public enum KnownFolderFlag : uint
{
None = 0x0,
CREATE = 0x8000,
DONT_VERFIY = 0x4000,
DONT_UNEXPAND= 0x2000,
NO_ALIAS = 0x1000,
INIT = 0x800,
DEFAULT_PATH = 0x400,
NOT_PARENT_RELATIVE = 0x200,
SIMPLE_IDLIST = 0x100,
ALIAS_ONLY = 0x80000000
}
[DllImport("shell32.dll")]
static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid rfid, uint dwFlags, IntPtr hToken, out IntPtr pszPath);
static void Main(string[] args)
{
KnownFolderFlag[] flags …Run Code Online (Sandbox Code Playgroud) 我在c#中编写一个功能,我需要列出给定目录中的所有文件/文件夹名称.该功能在EN OS上运行良好,但是当我在本地化操作系统(例如)德语上运行应用程序时,我仍然获得特殊文件夹的英文名称(程序文件而不是程序,收藏夹而不是收藏夹等).我不认为带有Environment.SpecialFolder的Environment.GetFolderPath可以提供任何帮助,因为它与我想要的完全相反,即它给出了枚举的特殊文件夹的完整路径,而我想要给定的本地化名称路径.我曾尝试使用File,SHFileInfo,但没有用.任何想法,我如何获得操作系统中显示的文件夹名称?
这很奇怪,一些startmenu项目似乎解析为一个"友好"的名称,该名称未包含在实际的.lnk文件中.例如:
"c:\ ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\System Tools\dfrgui.lnk"在资源管理器中显示为"磁盘碎片整理程序",实际的快捷方式文件既不包含真实姓名,也包含指向exe"C:\ Windows\system32\dfrgui.exe""
这是一个Win32 API的东西还是有一个更简单的方法来获取文件/开始菜单项的"友好"名称?