获取.NET中的常见桌面路径

Ore*_*ost 8 .net windows windows-shell

我需要将文件存储到Windows上的公共桌面.该应用程序是一个非常特殊的应用程序,适用于一个特殊的PC(设备准备),因此非技术用户必须很容易找到并修改配置文件.现在我们切换到一个域,因为不同的人(具有不同的帐户)应该使用该软件,它必须在一个共同的位置,每个用户都可以看到.所以请不要问为什么它在桌面上;)

以前,我刚刚用过Environment.GetFolderPath(Environment.SpecialFolder.Desktop).SpecialFolder枚举中有几个常见文件夹,但普通桌面似乎不存在.难道我失去了一些东西,或者我要的P/Invoke SHGetSpecialFolderPathCSIDL_COMMON_DESKTOPDIRECTORY

Tho*_*que 2

我认为您必须使用SHGetSpecialFolderPathAPI,因为“CommonDesktopDirectory”没有枚举值。您不能显式使用 的值CSIDL_COMMON_DESKTOPDIRECTORY并将其转换为Environment.SpecialFolder,因为该GetFolderPath方法会检查该值是否在枚举中定义。这是该方法的代码GetFolderPath(来自 Reflector):

public static string GetFolderPath(SpecialFolder folder)
{
    if (!Enum.IsDefined(typeof(SpecialFolder), folder))
    {
        throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, GetResourceString("Arg_EnumIllegalVal"), new object[] { (int) folder }));
    }
    StringBuilder lpszPath = new StringBuilder(260);
    Win32Native.SHGetFolderPath(IntPtr.Zero, (int) folder, IntPtr.Zero, 0, lpszPath);
    string path = lpszPath.ToString();
    new FileIOPermission(FileIOPermissionAccess.PathDiscovery, path).Demand();
    return path;
}
Run Code Online (Sandbox Code Playgroud)

因此您可以轻松复制和调整您需要的部分......