Как мне найти папку рабочего стола пользователя? - PullRequest
5 голосов
/ 24 июня 2011

Я создаю небольшое приложение в visual studio, которое загружает ПЗУ в эмулятор. У меня два эмулятора и 20 ROM.

Я сделал форму и добавил несколько кнопок. Когда вы нажимаете кнопку, она открывает новую форму и закрывает старую. Затем в новой форме у меня есть четыре кнопки: каждая загружает разные ПЗУ в эмуляторе. Поэтому, когда вы нажимаете кнопку 1, этот код срабатывает:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles yellow.Click
Shell("C:\Users\shifty\Desktop\pokemon games\Emulator\VBA\VisualBoyAdvance.exe ""C:\Users\shifty\Desktop\pokemon games\Roms\Yellow\Pokemon Yellow.gb""", vbNormalFocus)
End Sub

Работает нормально - нажимаю на него и загружаю игру в эмулятор. Немного проблем с путями к файлам. Если я отправлю это приложение другу, оно все равно будет искать «C: \ Users \ shiftty \ Desktop \» - но это на моем компьютере, а не на его.

Есть ли способ заставить приложение искать файл на своем компьютере (без изменения пути к файлу (C: \ Users \ "" его имя пользователя "" \ Desktop))

Ответы [ 8 ]

38 голосов
/ 24 июня 2011

Environment.GetFolderPath(Environment.SpecialFolder.Desktop)

Это будет папка рабочего стола для текущего пользователя.

Она даже будет корректно работать между XP, Vista и Windows 7.

8 голосов
/ 18 августа 2012

Старый пост, но я должен встать на сторону Мак Шифти.Вы не можете предположить, что все являются экспертами по кодированию.Если бы они были такими, они бы здесь не задавали подобные вопросы.

Ни один из приведенных выше ответов не был полным

Environment.GetFolderPath(Environment.SpecialFolder.Desktop)) <<< включает и дополнительно) <code>Environment.GetFolderPath(Environment.SpecialFolder.Desktop)); <<<дополнительно) и;это C или java, а не VB, который он, очевидно, использует в своем примере кода. </p>

Оба из них дают вам только половину необходимого кода для генерации чего-либо пригодного для использования.даст вам необходимый результат, c: \ users \ shiftty \ desktop

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles yellow.Click
    Dim s As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
    Shell(s & "\Desktop\pokemon games\Emulator\VBA\VisualBoyAdvance.exe " & s & "\pokemon games\Roms\Yellow\Pokemon Yellow.gb""", vbNormalFocus)
End Sub
4 голосов
/ 24 июня 2011

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

Использование:

Environment.GetFolderPath(Environment.SpecialFolder.Desktop));

3 голосов
/ 30 мая 2014

Действительно старый пост на данный момент, но, эй, нашел то, что искал.

MC SH1FTY, я полагаю, вы уже поняли это, но для того, что вы пытаетесь сделать:

1) Вызовите тот код, который Спенс написал как переменную (я бы объявил это глобально, но это мое предпочтение. Для этого:

Public userDesktopLoc As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)

2) Либо используйте это ПРЯМО в вашемкод или создайте другую строку для объединения каталога:

Вариант A)

Public emulatorPath As String = userDesktopLoc & "pokemon games\Emulator\VBA\VisualBoyAdvance.exe "
Public romPath As String = userDesktopLoc & "pokemon games\Roms\Yellow\Pokemon Yellow.gb"

Затем в подпрограмме замените текущий оператор Shell на:

Shell(emulatorPath & romPath, vbNormalFocus)

Или вариант B, который является ответом thedsz:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles yellow.Click
        Dim s As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
        Shell(s & "\Desktop\pokemon games\Emulator\VBA\VisualBoyAdvance.exe " & s & "\pokemon games\Roms\Yellow\Pokemon Yellow.gb""", vbNormalFocus) 
End Sub
3 голосов
/ 09 февраля 2014

У меня были проблемы с использованием метода Environment.GetFolderPath из предыдущих ответов.

Следующие работы в VB 2012, My.Computer.FileSystem.SpecialDirectories.Desktop

Итак, если у вас есть файл на рабочем столе пользователя с именем "contacts.txt", следующий путь покажет полный путь,

' Desktop path
Dim desktopPath = My.Computer.FileSystem.SpecialDirectories.Desktop

' Concatenate desktop path and file name
filePath = desktopPath & "/contacts.txt"

MsgBox(filePath)

Документация

0 голосов
/ 13 сентября 2013

ответ прост.

  • поместите это наверху формы
  • "Public thepath As String = Environment.GetFolderPath (Environment.SpecialFolder.Desktop)"
  • , который гарантирует, что файл находится на рабочем столе!
  • затем "нажмите на кнопку или что-то еще, что вы использовали, чтобы открыть эму и введите
  • "Process.Start (thepath +" emulator.exe "+" ROM, который вы хотите ")
0 голосов
/ 30 июня 2011

Используя это, вы гарантируете, что эмулятор находится на рабочем столе пользователя. Это не всегда так. Я знаю, что я перемещаю вещи, которые я загружаю или друг посылает мне. Лучше использовать App.Path и убедитесь, что ваш emulator.exe находится в каталоге с вашей маленькой программой переднего плана (обычно так).

0 голосов
/ 24 июня 2011

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

Затем вы используете два пути в вашем коде:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles yellow.Click
    Shell(emulatorPath + "\"" + romPath + "\"", vbNormalFocus)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...