Как открыть папки «Мои документы» и «Мой компьютер» из C #?

Я использовал два GUID для открытия папокМой компьюте а такжеМои документ.

Process.Start("iexplore.exe", "::{20d04fe0-3aea-1069-a2d8-08002b30309d}");
Process.Start("iexplore.exe", "::{450d8fba-ad25-11d0-98a8-0800361b1103}");

Но он открывает Internet Explorer, а затем открывает папкиМой компьюте а такжеМои документ.

 Suriyan Suresh07 июл. 2009 г., 09:15
Спасибо за ваш комментари
 arbiter02 июл. 2009 г., 17:27
Вы должны обернуть эти направляющие в константы со значимыми именами. Это может сэкономить много времени для вас и / или ваших коллег.
 Oliver Friedrich23 дек. 2009 г., 11:51
Пожалуйста, отмените ответ жестко закодированными направляющими.
 Doctor Jones10 июл. 2009 г., 19:53
@ арбитр, это очень хорошее предложение, оно сделает его более дружелюбным для любых разработчиков, поддерживающих код.

Ответы на вопрос(9)

основываясь на комментариях выше, я сузил решение, чтобы открыть Проводник без побочных эффектов:

Process.Start("::{450d8fba-ad25-11d0-98a8-0800361b1103}");

Я проверял это на Windows Server 2008 R2.

System.Diagnostics.Process.Start("...");

это выглядит сомнительно, но просто беги. Это сработает. Это код моего компьютера. Я не знаю, что это должно быть дляМои документ.

Просто введите

System.Diagnostics.Process.Start(directoryPath);

Это очень просто. Попробуй это

 poplitea01 дек. 2012 г., 19:51
Немного больше объяснений было бы неплохо ...

Ты пытался

Process.Start("explorer.exe", "::{20d04fe0-3aea-1069-a2d8-08002b30309d}");
Process.Start("explorer.exe", "::{450d8fba-ad25-11d0-98a8-0800361b1103}");

?

 Suriyan Suresh02 июл. 2009 г., 14:26
спасибо, что работал на меня
 Emmanuel16 янв. 2012 г., 12:03
Да, iexplorer.exe - это действительно Internet Explorer, а explorer.exe - это Windows Explorer.

System.Diagnostics.Process.Start("...");

Я знаю, это выглядит сомнительно, но просто беги. Это сработает. Это код моего компьютера. Я не знаю, что это должно быть для моих документов.

В Windows 7 это приводит к открытию папки, из которой запускается ваш исполняемый файл, то есть «текущей» папки.

шим способом достижения этого.

Ты можешь использовать Environment.GetFolderPathункция @, чтобы получить путь к любой из системных специальных папок. Он принимает Environment.SpecialFolder enum.

Таким образом, он будет более надежным, потому что у вас не будет никаких «магических» жестко закодированных значений.

Вот как ты это используешь:

//get the folder paths
string myComputerPath = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
string myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
//open explorer and point it at the paths
System.Diagnostics.Process.Start("explorer", myComputerPath);
System.Diagnostics.Process.Start("explorer", myDocumentsPath);

Важное примечание для пользователей Windows 7

Кажется, что попытка использовать этот код для открытия Моего компьютера в Windows 7 неправильно приводит к открытию папки «Библиотеки». Это связано с тем, что стандартное поведение запуска проводника с пустым путем изменилось в Windows 7.

Я отправил следующий отчет об ошибке в Connect, отправляйся и скажи ему, если ты думаешь, что это важно!

https: //connect.microsoft.com/VisualStudio/feedback/details/757291/environment-getfolderpath-not-working-correctly-in-windows-7#detail

(Спасибо JeremyK в комментариях за указание на это)

 Luaan06 мая 2016 г., 14:22
Это сработало только случайно.GetFolderPathункция @ дает вам только путь файловой системы к указанной специальной папке - если путь к файловой системе отсутствует, она возвращает пустую строку. Никаких ошибок, вы ожидали чего-то, что не указано в контракте. Таким образом, ваш ответ не только не лучше, чем ответ Bronto (он основан на недоговорном поведении, как и ответ Bronto), но, кроме того, он не работает - он работает только тогда, когда папка обозревателя по умолчанию - «Мой компьютер». То же самое относится и к «Моим документам», но, по крайней мере, это обычно существует в файловой системе:)
 Patrick McDonald02 июл. 2009 г., 14:50
Это также выглядит намного более читабельным, чем принятый ответ
 Suriyan Suresh26 дек. 2009 г., 06:12
как мне открыть корзину
 JeremyK06 авг. 2012 г., 21:15
Если я попробую это сделать в Windows 7, он не откроет Мой компьютер, вместо этого папка библиотеки, которая не предназначена
 Doctor Jones07 авг. 2012 г., 10:31
@ JeremyK кажется, что Мой компьютер возвращает пустой путь, и это открывает «Библиотеки» в Windows 7 вместо «Мой компьютер». Это похоже на ошибку, вызванную изменением поведения проводника по умолчанию в Windows 7. Похоже, что .Net Framework исходил из того, что путь к «Моему компьютеру» никогда не изменится. Я подал отчет об ошибке здесь (зайдите и проголосуйте, чтобы это можно было исправить): Connect.microsoft.com / VisualStudio / обратная связь / подробности / 757291 / .... Я обновил свой пост, чтобы упомянуть об этом.

Попробуй explorer.exe:

Process.Start("explorer.exe", "::{20d04fe0-3aea-1069-a2d8-08002b30309d}");
Process.Start("explorer.exe", "::{450d8fba-ad25-11d0-98a8-0800361b1103}");

string myComputerPath = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
System.Diagnostics.Process.Start("explorer", myComputerPath);

as Environment.SpecialFolder.MyComputer возвращает "", а Process.Start ("explorer", "") открывает Мои документы.

Кажется, GUID это делает:

Process.Start("explorer.exe", "::{20d04fe0-3aea-1069-a2d8-08002b30309d}");
Решение Вопроса

explorer полностью и просто "запусти" GUID напрямую:

Process.Start("::{20d04fe0-3aea-1069-a2d8-08002b30309d}"); ...

 SWeko02 июл. 2009 г., 16:16
Злостный! Это доставит массу удовольствия начинающему разработчику, который должен будет отлаживать этот код через 5 лет:)
 Doctor Jones07 авг. 2012 г., 09:54
@ SWeko меня огорчает, что этот ответ получил согласие
 Doctor Jones02 янв. 2019 г., 15:37
Для полного ознакомления с этими магическими руководствами, ознакомьтесь с документацией KnownFolderId на MSDN: Docs.microsoft.com / ан-ГБ / окна / настольные / оболочка / knownfolderid

Ваш ответ на вопрос