drummerboy0511 Ответов: 2

Доступ к папке Загрузки пользователя в VB.NET


Привет. Мне интересно, как я смогу получить путь к папке Загрузки пользователя (в Windows Vista и 7) в VB.NET.

Моя текущая попытка доступа к этой папке состояла в том, чтобы получить музыкальный каталог пользователя, "вычесть" строку "музыка" из этого пути и добавить в нее "загрузки". Однако я получил ошибку, которая сказала, что он не может конвертировать "C:\Users\USERNAME\Music-за двойника.

Кроме того, я попытался создать "C:\Users\" путь, добавив имя пользователя, а затем добавив каталог загрузок в конец этого файла. Это тоже не очень хорошо сработало.

Спасибо!

2 Ответов

Рейтинг:
2

Bernhard Hiller

Большинство специальных папок можно получить с помощью например Environment.GetFolderPath(Environment.SpecialFolder.MyMusic).
Но "загрузки" не охватываются этим перечислением...
Решение было показано при переполнении стека: http://stackoverflow.com/questions/3795023/downloads-folder-not-special-enough[^].


JF2015

Хороший. 5+

Рейтинг:
0

schlebe

Тот самый VB.Net (не C#) функция, которую я использую, следующая

<DllImport("shell32.dll")>
Private Function SHGetKnownFolderPath _
    (<MarshalAs(UnmanagedType.LPStruct)> ByVal rfid As Guid _
    , ByVal dwFlags As UInt32 _
    , ByVal hToken As IntPtr _
    , ByRef pszPath As IntPtr
    ) As Int32
End Function
    
Public Function GetDownloadsFolder() As String
    Dim sResult As String = ""
    Dim ppszPath As IntPtr
    Dim gGuid As Guid = New Guid("{374DE290-123F-4565-9164-39C4925E467B}")
    
    If SHGetKnownFolderPath(gGuid, 0, 0, ppszPath) = 0 Then
        sResult = Marshal.PtrToStringUni(ppszPath)
        Marshal.FreeCoTaskMem(ppszPath)
    End If
    Return sResult
End Function


В моей программе я вызываю его для перемещения некоторых CSV-файлов в другую папку, используя следующий код.

Dim sDownloadFolder = GetDownloadsFolder()
Dim di = New DirectoryInfo(sDownloadFolder)

'Move all CSV files that begin with BE in specific folder
'that has been defined in a CONFIG file (variable: sExtractPath

For Each fi As FileInfo In di.GetFiles("BE*.csv")
    Dim sFilename = sExtractPath & "\" & fi.Name
    File.Move(fi.FullName, sFilename)
Next