почему specialfolder.personal возвращает c: / user / xxx / Documents - PullRequest
2 голосов
/ 10 ноября 2010

Я ожидаю, что specialfolder.personal возвращает c: / users / xxx, однако в моей системе Windows 7 он возвращает C: / Пользователи / ххх / Документы. Зачем? Как получить папку личного корневого каталога?

Ответы [ 2 ]

4 голосов
/ 10 ноября 2010

Из документации :

Личные: каталог, который служит общим хранилищем документов.Этот член эквивалентен MyDocuments.

Вместо этого вы хотите SpecialFolder.UserProfile.

UserProfile: папка профиля пользователя.Приложения не должны создавать файлы или папки на этом уровне;они должны поместить свои данные в места, указанные ApplicationData.

Обновление

Очевидно, это работает только в .NET 4. Поэтому вместо этого попробуйте следующее:

System.Environment.GetEnvironmentVariable("UserProfile");
1 голос
/ 10 ноября 2010

Вы пробовали:

Environment.GetFolderPath (System.Environment.SpecialFolder.UserProfile)

Редактировать: этот элемент emum присутствует только в Framework 4.0.В более ранних версиях Framework следующее должно давать тот же результат:

void Main()
{
    var lpszPath = new StringBuilder(260);
    const int UserProfile = 40;
    SHGetFolderPath (IntPtr.Zero, UserProfile, IntPtr.Zero, 0, lpszPath);
    string answer = lpszPath.ToString();    
}

[DllImport("shfolder.dll", CharSet=CharSet.Auto)]
internal static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath);
...