如何从MS Vista上的Windows服务获取Users文件夹的路径? 我想到 C:\ Users 目录的路径,但它可能是不同的位置取决于系统本地化。
答案 0 :(得分:11)
查看Environment.SpecialFolder Enumeration,例如
Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory);
调整所需的特殊文件夹。但是,在阅读发现here的其他帖子时,如果您想要完全 c:\ users 而不是 c:\,则可能需要对字符串进行一些操作。例如,用户\ public 。
答案 1 :(得分:7)
System.Environment.SpecialFolder将允许您访问所需的所有文件夹,例如“我的文档”等。
如果您使用UserProfile SpecialFolder,那么应该为您提供用户下个人资料的路径。
string userPath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
答案 2 :(得分:2)
@Neil指出的最佳方法是将SHGetKnownFolderPath()
与FOLDERID_UserProfiles
一起使用。但是,c#没有这个。但是,调用它并不难:
using System;
using System.Runtime.InteropServices;
namespace SOExample
{
public class Main
{
[DllImport("shell32.dll")]
static extern int SHGetKnownFolderPath([MarshalAs(UnmanagedType.LPStruct)] Guid rfid, uint dwFlags, IntPtr hToken, out IntPtr pszPath);
private static string getUserProfilesPath()
{
// https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx#folderid_userprofiles
Guid UserProfilesGuid = new Guid("0762D272-C50A-4BB0-A382-697DCD729B80");
IntPtr pPath;
SHGetKnownFolderPath(UserProfilesGuid, 0, IntPtr.Zero, out pPath);
string path = System.Runtime.InteropServices.Marshal.PtrToStringUni(pPath);
System.Runtime.InteropServices.Marshal.FreeCoTaskMem(pPath);
return path;
}
static void Main(string[] args)
{
string path = getUserProfilesPath(); // C:\Users
}
}
}
答案 3 :(得分:1)
我看不到该函数暴露给.NET,但在C(++)中它将是
SHGetKnownFolderPath(FOLDERID_UserProfiles, ...)
答案 4 :(得分:0)
System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal)