微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在.NET中获取常见的桌面path

我需要将文件存储到Windows上的通用桌面。 该应用程序对于一个特殊的PC(设备准备)来说是一个非常特殊的应用程序,所以对于非技术用户来说,查找和修改configuration文件是非常容易的。 现在我们切换到一个域名,因为不同的用户(拥有不同的帐户)应该使用这个软件,它必须位于一个共同的地方,每个用户都能看到。 所以请不要问为什么它在桌面上;)

以前,我只用了Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 。 SpecialFolder枚举中有几个常见的文件夹,但常见的桌面似乎不在那里。 我错过了什么,或者我必须用CSIDL_COMMON_DESKTOPDIRECTORY p /调用SHGetSpecialFolderPath吗?

Mono上的跨平台高分辨率计时器?

Windows的声音pipe理器类

为什么MS不能使用.Net打开?

在进程启动之前,在命令行参数上执行什么处理/validation?

C#:什么是最快的方式来生成一个唯一的文件名?

我想你必须使用SHGetSpecialFolderPath API,因为“CommonDesktopDirectory”没有枚举值。 您不能显式使用CSIDL_COMMON_DESKTOPDIRECTORY的值并将其转换为Environment.SpecialFolder ,因为GetFolderPath方法检查值是在enum中定义的。 以下是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,lpszPath); string path = lpszPath.ToString(); new FileIOPermission(FileIOPermissionAccess.Pathdiscovery,path).Demand(); return path; }

所以你可以很容易地复制和适应你需要的部分…

澄清 – 通过普通的桌面你的意思是C: Documents and Settings 所有用户桌面?

如果是的话,这是一个丑陋的黑客 –

Dim c As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) Dim comDesktop As String = c.Substring(0,c.LastIndexOf("")) + "Desktop"

您可以使用Windows脚本宿主 – WshShell.SpecialFolders

http://msdn.microsoft.com/en-us/library/0ea7b5xe(VS.85).aspx

首先,添加对“Windows脚本宿主对象模型”的引用。 您可以在“添加引用”对话框的“COM”选项卡中找到它。

using IWshRuntimeLibrary; object commonUserDesktop = "AllUsersDesktop"; WshShell shell = new WshShellClass(); string commonPath = shell.SpecialFolders.Item(ref commonUserDesktop).ToString();

另一种方式(是的,这也是丑陋的,可能只会在Windows XP上,而不是在Vista上)是从注册表中读取一个

HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows CurrentVersion Explorer Shell Folders,Common Desktop

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐