Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [VB.NET] Path Disco Mappato.

    Ciao a tutti,
    qualcuno sa come reperire il path di un disco mappato?

    ad esempio io ho un disco mappato "\\server\temp" con il drive "X:\"

    come faccio a reperire il path mappato passando ad una funzione il drive "X:\" ?

    sto provando di tutto..pure le api di windows :

    GetVolumePathNameW
    GetVolumeInformationW
    SetVolumeMountPointW
    FindFirstVolumeW
    GetLogicalDriveStringsW

    ma niente di niente.. mi torna sempre informazioni vuote!!

    Grazie mille dell'aiuto..
    Mandami una E-Mail
    Ciuz xxx80
    "WhatYouSeeIsWhatYouGet"

    bzzz,bzzz,bzzz

  2. #2
    nessuno??
    Mandami una E-Mail
    Ciuz xxx80
    "WhatYouSeeIsWhatYouGet"

    bzzz,bzzz,bzzz

  3. #3
    Non è che non dichiari correttamente le API in questione?
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    la mia dichiarazione nel codice è :

    Private Declare Function GetVolumePathNameW Lib "Kernel32.dll" (ByVal serverName As String, ByRef serverNameVolume As String, ByRef intLenght As Integer) As Integer

    mentre dalla documentazioen microsoft delle platform sdk c'è scritto...
    BOOL GetVolumePathName(
    LPCTSTR lpszFileName,
    LPTSTR lpszVolumePathName,
    DWORD cchBufferLength
    );




    poi nel codice scrivo :

    intRetCode = GetVolumePathNameW("X:\", str2, 255)

    come intRetCode mi torna 1 (castato a boolean vuol dire True)... il che vuol dire che è andato a buon fine..ma str2 è sempre vuota..

    hai qualche suggerimento ?
    Mandami una E-Mail
    Ciuz xxx80
    "WhatYouSeeIsWhatYouGet"

    bzzz,bzzz,bzzz

  5. #5
    Al di là del fatto che la corretta dichiarazione sarebbe questa
    codice:
            Private Declare Auto Function GetVolumePathName Lib "Kernel32.dll" (ByVal lpszFileName As String, ByVal lpszVolumePathName As Text.StringBuilder, ByVal cchBufferLength As Integer) As Integer
    e questo il corretto modo di richiamarla
    codice:
                Dim buffer As New Text.StringBuilder(255)
                If Not GetVolumePathName("z:\", buffer, buffer.Capacity) Then
                      Console.WriteLine(buffer.ToString())
                End If
    . In ogni caso la GetVolumePathName non va bene per quello che devi fare, credo che potrebbe andare bene invece la WNetGetConnection.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Ecco un esempio:
    codice:
            Private Declare Auto Function WNetGetConnection Lib "mpr.dll" (ByVal lpLocalName As String, ByVal lpRemoteName As Text.StringBuilder, ByRef lpnLength As Integer) As Integer
                '...
                Dim retCode As Integer
                Dim buffer As New Text.StringBuilder(255)
                retCode = WNetGetConnection("z:", buffer, buffer.Capacity)
                If Not retCode Then
                    Console.WriteLine(buffer.ToString())
                Else
                    Console.Write("Errore ")
                    Console.Write(retCode)
                    Console.WriteLine(".")
                End If
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    CIAO,
    grazie mille dei consigli...in effetti la dichiarazione del secondo parametro era in effetti un stringBuilder e non una string..

    Cmq utilizzando La GetPathName in effetti il risultato che volevo ottenere non è quello...

    Utilizzando invece la WNetGetConnection mi torna come errore il numero "1200" che corrisponde a "ERROR_BAD_DEVICE"..

    nel terzo parametro di WNetGetConnection hai messo un integer pur essendo nel prototipo originale un LPDWORD... è corretto..?...

    Grazie ancora...Ciao
    Mandami una E-Mail
    Ciuz xxx80
    "WhatYouSeeIsWhatYouGet"

    bzzz,bzzz,bzzz

  8. #8
    Originariamente inviato da Timbro
    Utilizzando invece la WNetGetConnection mi torna come errore il numero "1200" che corrisponde a "ERROR_BAD_DEVICE"..
    Sicuro di aver scritto il nome del disco correttamente? Forse ti sei dimenticato di modificare il mio esempio (in cui c'è z:, mentre nel tuo caso ci dovrebbe essere j:)...
    nel terzo parametro di WNetGetConnection hai messo un integer pur essendo nel prototipo originale un LPDWORD... è corretto..?...
    Sì; la macro LPDWORD si espande in unsigned int *, ossia un puntatore ad un intero a 32 bit senza segno; il puntatore e l'intero a 32 bit ci sono, abbiamo infatti dichiarato il parametro come Integer (alias di System.Int32, che, come dice il nome stesso, è un intero a 32 bit) e lo passiamo ByRef (e quindi tramite un puntatore), mentre in questo caso il fatto che sia un intero con o senza segno non incide molto, perché dubito che passeremo mai a questa API un buffer di più di 2147483647 caratteri.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    sai cos'era?

    il byRef Dell' LPDWORD... l'avevo messo byVal.. che picio..

    Cmq grazie mille.
    Mandami una E-Mail
    Ciuz xxx80
    "WhatYouSeeIsWhatYouGet"

    bzzz,bzzz,bzzz

  10. #10
    Non c'è di che; ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.