Mittwoch, 3. September 2008

Erzeugen von UNC Pfadnamen / Creating UNC pathnames

Im folgenden Posting geht es um die Konvertierung von Verzeichnisnamen die auf gemappte Laufwerke zugreifen.

Mit Hilfe der WIN32API können wir über die dort verfügbare Funktion WNetGetConnection den UNC Namen ( Universal/Uniform Naming Convention ) einer solchen Verbindung abfragen.


FUNCTION GetUNCPath
LPARAMETERS vMappedName as String
  * // Datendeklaration und Initialisierung
  LOCAL    lcUNCBuffer as String, liLength as Integer, ;
          lcUNCName as String, llContinue as Boolean, ;
          lcMessage as String
  lcUNCBuffer    = []
  liLength    = 0
  lcUNCName    = []
  llContinue    = .T.
  lcMessage    = []
  * // Deklaration der API-Funktion
  TRY
      DECLARE INTEGER WNetGetConnection IN WIN32API ;
              STRING @ lpLocalName, ;
              STRING @ lpRemoteName, ;
              INTEGER @ lpliLength
  CATCH
      TEXT TO lcMessage NOSHOW TEXTMERGE PRETEXT 2
           Deklaration von WNetGetConnection in WIN32API
           ist fehlgeschlagen. Funktion wird vorzeitig beendet.
      ENDTEXT
      MESSAGEBOX(lcMessage,0+16+0,[Information])
      llContinue = .F.
  ENDTRY
  * // Umsetzung des lokalen Pfades in einen UNC Pfad
  IF llContinue
      IF !EMPTY(m.vMappedName) AND VARTYPE([m.vMappedName]) = [C]
          lcUNCBuffer        = REPL(CHR(0),261)
          liLength        = LEN(lcUNCBuffer)
          m.vMappedName    = ALLTRIM(m.vMappedName)
          IF LEN(m.vMappedName) = 1
              m.vMappedName = m.vMappedName + [:]
          ENDIF
          TRY
              IF WNetGetConnection(m.vMappedName, @lcUNCBuffer, @liLength) = 0
                 lcUNCName = LEFT(lcUNCBuffer,AT(CHR(0),lcUNCBuffer)-1)
              ENDIF
          CATCH
              TEXT TO lcMessage NOSHOW TEXTMERGE PRETEXT 2
                   Aufruf von WNetGetConnection in WIN32API
                   ist fehlgeschlagen. UNC-Pfad konnte nicht
                   generiert werden.
              ENDTEXT
              MESSAGEBOX(lcMessage,0+16+0,[Information])
          ENDTRY
      ENDIF
  ENDIF
  RETURN lcUNCName
ENDFUNC

Keine Kommentare:

Kommentar veröffentlichen