3

Есть ли разница между %USERPROFILE%\Desktop и %SYSTEMDRIVE%%HOMEPATH%\Desktop\ в том плане что-бы путь был правильным на версиях Windows от Windows XP? Я где-то видел что на компьютере вообще 2 папки рабочего стола, одна Desktop а другая Рабочий стол. И они разные, одна пустая а другая нет. Это что значит? Как правильно указать путь к рабочему столу независимо от версии ОС и прочего?

Пока получаю путь System.getenv("USERPROFILE"). Получается C:\Users\User. Не знаю везде ли это будет работать.

Написал вот так, так как в Windows XP на котором я только что проверил папка называлась Рабочий стол

Path ADRESS = Paths.get(System.getenv("USERPROFILE") + "\\Desktop");

    if(Files.exists(ADRESS)) {
        \\
    }

ADRESS = Paths.get(System.getenv("USERPROFILE") + "\\Рабочий стол");

    if(Files.exists(ADRESS)) {            
        \\
    }
aaa
  • 860
  • Второй вариант однозначно неверный, поскольку теоретически рабочий стол может располагаться не на системном диске. – Yaant Mar 11 '17 at 17:15
  • @Yaant Да, понял – aaa Mar 11 '17 at 17:17
  • Рабочий стол может отсутствовать по обоим путям, проверено в Windows XP – andreymal Mar 11 '17 at 17:18
  • @andreymal Можете объяснить тогда? – aaa Mar 11 '17 at 17:21
  • А я сам не знаю как правильно, я простой юзер, просто предупредил) – andreymal Mar 11 '17 at 17:28

2 Answers2

3

%USERPROFILE%\Desktop - выведет на папку рабочего стола пользователя с вероятностью 90%, потому что домашние пользователи редко меняют настройки по-умолчанию и вообще догадываются об их существовании.

Значение системное переменной %USERPROFILE% содержит абсолютный путь (включает букву диска и все промежуточные папки) к папке профиля пользователя, и задается операционной системой (менять руками категорически не рекомендуется).

%Public%\Desktop\ - выведет на общую папку рабочего стола для всех пользователей.

Название папки по-умолчанию всегда Desktop. Локализованное название задается с помощью настроек в скрытом файле desktop.ini и является просто синонимом.

Папка рабочего стола, как и почти все папки вроде Documents, Favorites и т.д. могут быть перенаправлены в произвольное место, включая сетевые ресурсы, с помощью групповых политик, либо ручной настройкой самим пользователем. В этом случае %USERPROFILE%\Desktop вернет неверный путь, и даже при наличии там соответствующей папки, пользователь не увидит на своем рабочем столе добавленные в нее файлы.

В таком случае, для получения текущего пути к рабочему столу пользователя, можно воспользоваться реестром.

Нам нужна ветка:
"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
и в ней ключ Desktop, значение которого содержит абсолютный путь к текущему рабочему столу пользователя. В этой же ветке можно найти и другие ключи, которые содержат пути к соответствующим папкам пользователя.

Информация по реестру верна для всех версий, начиная с Win2000 до Win10 включительно.


Полезные ссылки:
https://social.technet.microsoft.com/wiki/contents/articles/6083.windows-xp-folders-and-locations-vs-windows-7-and-vista.aspx
http://libertyboy.free.fr/computing/reference/envariables/

Rasul
  • 3
rdorn
  • 16,323
  • Смотрел папки на Windows XP и там была только одна папка под названием Рабочий стол – aaa Mar 12 '17 at 08:40
  • @ELe удалите из нее desktop.ini и увидите ее настоящее название. вы же не думаете что для разных локализацй в MS стали бы делать отдельные структуры папок? – rdorn Mar 12 '17 at 08:42
  • @ELe вообще, через desktop.ini любой папке можно дать произвольное имя не совпадающее с оригиналом. И у папки будет два имени, видимое и настоящее – rdorn Mar 12 '17 at 08:56
  • И в пути к папке тоже будет произвольное имя? У меня в пути был Рабочий стол. Через консоль не смог найти Desktop. Переменная юзера содержала Рабочий стол – aaa Mar 12 '17 at 08:59
  • @ELe в пути в реестре, будет настоящее имя. А вообще указывать можно любое из этих имен: и настоящее, и синоним. Они в данном случае равнозначны – rdorn Mar 12 '17 at 09:00
  • Нужно проверить реестр на Windows XP – aaa Mar 12 '17 at 09:01
  • @ELe согласно документации информация по реестру верна начиная с Win2000 по текущую версию – rdorn Mar 12 '17 at 09:03
  • @А будет ли в Windows XP не User Shell Folders а Shell Folders и в ней Desktop? У меня на Windows 10 там содержится полный путь до рабочего стола. – aaa Mar 19 '17 at 12:28
  • @ELe по идее да. В реестре некоторые ветки продублированы, в том смысле, что есть текущие активные ветки, и сохраненные пользователем, и сохраненные просто замещают текущие при входе пользователя, но это не для всех веток верно – rdorn Mar 19 '17 at 12:32
  • @ELe в Shell Folders больше настроек чем в User Shell Folders, во всяком случае в win 7 – rdorn Mar 19 '17 at 12:35
  • @Мне нужно быть уверенным что там будет содержатся путь до рабочего стола пользователя независимо от версии Windows. Использую только его. Я так понимаю это настройки текущей учетной записи? – aaa Mar 19 '17 at 12:36
  • @ELe для версий от 2000 до 10, будет, для более ранних и последующих сами понимаете =) – rdorn Mar 19 '17 at 12:38
  • @ELe К тому же лучший способ получить 100% гарантию - это проверить, а не верить на слово кому бы то ни было. Виртуалки еще ни кто не запрещал, поставьте да посмотрите. – rdorn Mar 19 '17 at 12:45
  • Добро, уже качаю Microsoft Virtual PC – aaa Mar 19 '17 at 12:48
  • http://ru.stackoverflow.com/questions/641624/%D0%9D%D0%B5%D0%B2%D0%B5%D1%80%D0%BD%D0%BE%D0%B5-%D1%81%D1%87%D0%B8%D1%82%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8-%D1%80%D0%B5%D0%B5%D1%81%D1%82%D1%80%D0%B0-%D0%B2-windows-xp-%D0%9F%D1%80%D0%BE%D0%BF%D0%B0%D0%B4%D0%B0%D0%B5%D1%82-%D1%87%D0%B0%D1%81%D1%82%D1%8C-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B8 Помогите получить значение, \s+ удаляет символы – aaa Mar 19 '17 at 20:39
1

Современные версии windows пишут алиас к папке Desktop "Рабочий стол". Поэтому правильно было бы, как я считаю писать C:\Users\%USERPROFILE%\Desktop.

  • При указании пути нужно указывать диск C:\ ? То есть C:%USERPROFILE%\Desktop ? Или нужно указать пути до папки с пользователями? – aaa Mar 11 '17 at 17:14
  • Да, конечно C:%USERPROFILE%\Desktop – Enlightener Mar 11 '17 at 17:14
  • Без папки пользователей?(Users) – aaa Mar 11 '17 at 17:15
  • 1
    Нет с папкой пользователя C:\Users%USERPROFILE%\Desktop – Enlightener Mar 11 '17 at 17:17
  • В комментариях написали что и 1 и 2 путь может быть неверным. – aaa Mar 11 '17 at 17:28
  • 4
    @Enlightener Не вводите в заблуждение. В %USERPROFILE% уже содержится и имя диска и Users. То есть C:\Users\%USERPROFILE%\Desktop будет эквивалентно C:\Users\C:\Users\<имя пользователя>\Desktop. – Yaant Mar 11 '17 at 17:29
  • @Yaant Как быть? – aaa Mar 11 '17 at 17:30
  • @ELe насчет WinXP не скажу, уже не помню, как оно там было. Но на более старших версиях вариант %USERPROFILE%\Desktop должен работать. – Yaant Mar 11 '17 at 17:33
  • @Yaant Очень жаль что не скажете – aaa Mar 11 '17 at 17:34