Results 1 to 3 of 3

Thread: Get UNC from Shared/Mapped Drive???

  1. #1

    Thread Starter
    Addicted Member jcouture100's Avatar
    Join Date
    Aug 1999
    Posts
    141

    Question

    Does anyone know how to the UNC Path for a mapped drive? I would like to be able to have a user browse for a file, but then convert the path to UNC when they save the path. Example: if the user selects the file ...

    "M:\test\textfile.txt"

    and M: is mapped to "\\Svr1\Files",

    I want to have the filename converted to

    "\\Svr1\Files\test\textfile.txt"

    Any help would be appreciated.
    JC

  2. #2
    Hyperactive Member
    Join Date
    May 2000
    Location
    Or
    Posts
    316
    I actually had this question a while back, and microsoft had the answer. The follow code will return the UNC for the Drive. Then you just have to reconstruct the path of the file from there. The following code needs just a command1 for you to test.

    Code:
    Option Explicit
    
          Private Const RESOURCETYPE_ANY = &H0
          Private Const RESOURCE_CONNECTED = &H1
    
          Private Type NETRESOURCE
             dwScope As Long
             dwType As Long
             dwDisplayType As Long
             dwUsage As Long
             lpLocalName As Long
             lpRemoteName As Long
             lpComment As Long
             lpProvider As Long
          End Type
    
          Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias _
             "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, _
             ByVal dwUsage As Long, lpNetResource As Any, lphEnum As Long) _
             As Long
    
          Private Declare Function WNetEnumResource Lib "mpr.dll" Alias _
             "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, _
             lpBuffer As Any, lpBufferSize As Long) As Long
    
          Private Declare Function WNetCloseEnum Lib "mpr.dll" ( _
             ByVal hEnum As Long) As Long
    
          Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" _
             (ByVal lpString As Any) As Long
    
          Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" _
             (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
    
          Private Sub Command1_Click()
             MsgBox LetterToUNC("F:") ' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
          End Sub
    
          Function LetterToUNC(DriveLetter As String) As String
             Dim hEnum As Long
             Dim NetInfo(1023) As NETRESOURCE
             Dim entries As Long
             Dim nStatus As Long
             Dim LocalName As String
             Dim UNCName As String
             Dim i As Long
             Dim r As Long
    
             ' Begin the enumeration
             nStatus = WNetOpenEnum(RESOURCE_CONNECTED, RESOURCETYPE_ANY, _
                0&, ByVal 0&, hEnum)
    
             LetterToUNC = "Drive Letter Not Found"
    
             'Check for success from open enum
             If ((nStatus = 0) And (hEnum <> 0)) Then
                ' Set number of entries
                entries = 1024
    
                ' Enumerate the resource
                nStatus = WNetEnumResource(hEnum, entries, NetInfo(0), _
                   CLng(Len(NetInfo(0))) * 1024)
    
                ' Check for success
                If nStatus = 0 Then
                   For i = 0 To entries - 1
                      ' Get the local name
                      LocalName = ""
                      If NetInfo(i).lpLocalName <> 0 Then
                         LocalName = Space(lstrlen(NetInfo(i).lpLocalName) + 1)
                         r = lstrcpy(LocalName, NetInfo(i).lpLocalName)
                      End If
    
                      ' Strip null character from end
                      If Len(LocalName) <> 0 Then
                         LocalName = Left(LocalName, (Len(LocalName) - 1))
                      End If
    
                      If UCase$(LocalName) = UCase$(DriveLetter) Then
                         ' Get the remote name
                         UNCName = ""
                         If NetInfo(i).lpRemoteName <> 0 Then
                            UNCName = Space(lstrlen(NetInfo(i).lpRemoteName) _
                               + 1)
                            r = lstrcpy(UNCName, NetInfo(i).lpRemoteName)
                         End If
    
                         ' Strip null character from end
                         If Len(UNCName) <> 0 Then
                            UNCName = Left(UNCName, (Len(UNCName) _
                               - 1))
                         End If
    
                         ' Return the UNC path to drive
                         LetterToUNC = UNCName
    
                         ' Exit the loop
                         Exit For
                      End If
                   Next i
                End If
             End If
    
             ' End enumeration
             nStatus = WNetCloseEnum(hEnum)
          End Function
    Hope this helps

    (Using VB 6 SP 3)


  3. #3

    Thread Starter
    Addicted Member jcouture100's Avatar
    Join Date
    Aug 1999
    Posts
    141

    Talking

    Fantastic! It works great! Thanks.
    JC

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width