gpt4 book ai didi

c# - 如何确定 Windows 'Download folder' 路径?

转载 作者:IT王子 更新时间:2023-10-29 04:30:32 25 4
gpt4 key购买 nike

在我的机器上,它在这里:

string downloadsPath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
"Downloads");

但是在同事的机器上,这个文件夹不存在,他的下载文件夹在他的“我的文档”文件夹中。 我们都在 Windows 7 上 *。

*编辑:事实上,他并不是在自己的机器上运行应用程序,而是在 Windows Server 2003 机器上运行。

最佳答案

Windows 没有为下载文件夹定义 CSIDL,并且它不能通过 Environment.SpecialFolder 枚举获得。

但是,新的 Vista Known Folder API 确实用 FOLDERID_Downloads 的 ID 定义了它。获取实际值的最简单方法可能是 P/调用 SHGetKnownFolderPath

public static class KnownFolder
{
public static readonly Guid Downloads = new Guid("374DE290-123F-4565-9164-39C4925E467B");
}

[DllImport("shell32.dll", CharSet=CharSet.Unicode)]
static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid rfid, uint dwFlags, IntPtr hToken, out string pszPath);

static void Main(string[] args)
{
string downloads;
SHGetKnownFolderPath(KnownFolder.Downloads, 0, IntPtr.Zero, out downloads);
Console.WriteLine(downloads);
}

请注意,pinvoke.net 上给出的 P/invoke 是不正确的,因为它无法使用 Unicode 字符集。我还利用了这个 API 返回由 COM 分配器分配的内存这一事实。上面 P/invoke 的默认编码是使用 CoTaskMemFree 释放返回的内存,这非常适合我们的需求。

请注意这是 Vista 及更高版本的 API,请勿尝试在 XP/2003 或更低版本上调用它。

关于c# - 如何确定 Windows 'Download folder' 路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7672774/

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