gpt4 book ai didi

C# 通过 ID 获取已知文件夹的位置

转载 作者:可可西里 更新时间:2023-11-01 12:38:57 24 4
gpt4 key购买 nike

我想通过 ID 获取目录/文件夹的位置。
例如,下载文件夹的 ID knownfolder:{374DE290-123F-4565-9164-39C4925E467B},当我将其输入 Windows 资源管理器的地址栏时,它会将我重定向到下载文件夹。

enter image description here

有一个这些 ID 的列表和相应的文件夹 here ,所以我可以对 ID 进行硬编码并像这样查找它们,但我不想这样做,除非这是唯一的方法。

有没有其他方法可以正确得到我想要的东西?

最佳答案

here 偷来的。进一步看,唯一的方法是使用 WinAPI/PInvoke

public static class KnownFolderFinder
{
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);

public static string GetFolderFromKnownFolderGUID(Guid guid)
{
return pinvokePath(guid, KnownFolderFlag.DEFAULT_PATH);
}

public static void EnumerateKnownFolders()
{
KnownFolderFlag[] flags = new KnownFolderFlag[] {
KnownFolderFlag.None,
KnownFolderFlag.ALIAS_ONLY | KnownFolderFlag.DONT_VERFIY,
KnownFolderFlag.DEFAULT_PATH | KnownFolderFlag.NOT_PARENT_RELATIVE,
};


foreach (var flag in flags)
{
Console.WriteLine(string.Format("{0}; P/Invoke==>{1}", flag, pinvokePath(CommonDocumentsGuid, flag)));
}
Console.ReadLine();
}

private static string pinvokePath(Guid guid, KnownFolderFlag flags)
{
IntPtr pPath;
SHGetKnownFolderPath(guid, (uint)flags, IntPtr.Zero, out pPath); // public documents

string path = System.Runtime.InteropServices.Marshal.PtrToStringUni(pPath);
System.Runtime.InteropServices.Marshal.FreeCoTaskMem(pPath);
return path;
}
}

然后你可以这样调用:

var folder = KnownFolderFinder.GetFolderFromKnownFolderGUID(new Guid("374DE290-123F-4565-9164-39C4925E467B");

关于C# 通过 ID 获取已知文件夹的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39532387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com