Visual Basic Simple
Ottenere il nome DOS di un file o directory
Sincronizza Indice
Sincronizza Indice
Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Ricerca personalizzata

Difficoltà: 2 / 5

All'interno di Windows è possibile dare ai files dei nomi lunghi fino a 255 caratteri, con estensione superiore ai tre caratteri. Tuttavia i files continuano ad essere memorizzati come alias nel formato canonico DOS.

In taluni casi è necessario ottenere l'alias DOS del file, ad esempio per utilizzarlo con un programma DOS esterno. Esiste una funzione API apposita a questo scopo: GetShortPathName.

Figura 1Svilupperemo subito un semplice progettino: inseriamo all'interno di un form due TextBox di nome FileLungo e FileDOS. Inseriamo anche un pulsante di nome Converti.
Il click sopra il pulsante scriverà all'interno della casella FileDOS il corrispondente nome DOS del file scritto nella casella FileLungo.

All'interno della finestra del codice scriviamo:

  1. Option Explicit
  2. Private Declare Function GetShortPathName Lib "KERNEL32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

E subito vediamo la funzione API accennata prima: come molte altre funzioni API che utilizzano le stringhe, ne esistono due differenti versioni: una progettata per ANSI ed una per UNICODE. Se utilizziamo Windows95/98/ME useremo la prima, se invece utilizziamo WindowsNT dovremo sfruttare quella progettata per stringhe UNICODE.
Questo corso è sviluppato intorno alla versione più semplice del sistema Windows, per cui faremo riferimento alla versione che tratta stringhe ANSI.

La nostra funzione API si chiamerà GetShortPathName e punterà, mediante alias, alla funzione GetShortPathNameA. Essa richiede tre parametri: il primo è la stringa contenente il percorso lungo, il secondo è una stringa buffer dove verrà memorizzato il corrispondente percorso DOS del file, mentre l'ultimo parametro è un numero intero indicante la grandezza in bytes del buffer comprendente anche il NULL finale.

  1. Private Sub Converti_Click()
  2.     Dim BufferDOS As String
  3.     Dim LunghezzaDOS As Long
  4.     Dim LunghezzaBuffer As Long
  5.     LunghezzaBuffer = Len(FileLungo.Text) + 1
  6.     BufferDOS = String(LunghezzaBuffer, 0)
  7.     LunghezzaDOS = GetShortPathName(FileLungo.Text, BufferDOS, LunghezzaBuffer)
  8.     FileDOS.Text = Left$(BufferDOS, LunghezzaDOS)
  9. End Sub

All'interno della routine che gestisce il click sopra il pulsante Converti viene effettuata la conversione da nome lungo a nome corto (DOS).

Abbiamo dichiarato una variabile di nome BufferDOS che verrà utilizzata per memorizzare il nome DOS. Abbiamo anche altre due variabili di tipo Long ed entrambe contengono la lunghezza di una stringhe: la prima, LunghezzaDOS, indica la lunghezza in bytes della stringa contenuta all'interno di BufferDOS; la seconda, LunghezzaBuffer, indica la lunghezza del buffer contenente il nome lungo.

Alla riga 8 calcoliamo la lunghezza della stringa da convertire, ovvero del nome di file lungo, mediante l'istruzione Len. Tale valore verrà poi utilizzato per comunicare alla funzione API la dimensione di BufferDOS. Poiché stiamo lavorando con stringhe, è necessario calcolare anche il NULL finale della stringa. A tale scopo aggiungiamo un byte all'ampiezza del buffer (LunghezzaBuffer) per contenere il NULL finale.

Alla riga 9 prepariamo il buffer di nome BufferDOS mediante l'utilizzo dell'istruzione String. L'ampiezza del buffer è determinata dalla variabile LunghezzaBuffer preparata prima.

Alla riga 10 effettuiamo la chiamata alla funzione API fornendole come parametri la stringa contenuta nella casella di testo FileLungo, il buffer BufferDOS e la sua ampiezza LunghezzaBuffer.
In uscita la funzione GetShortPathName ci restituirà il numero di caratteri di cui si compone il nome DOS e, per riferimento, memorizzerà all'interno della variabile BufferDOS il percorso DOS.

Adesso possiamo completare la nostra funzione scrivendo all'interno della casella di testo NomeDOS il nome DOS del file, estraendo i primi caratteri da BufferDOS. Il numero di caratteri da estrarre è memorizzato all'interno di LunghezzaDOS poiché restituito dalla chiamata alla funzione API GetShortPathName.

Figura 2Possiamo provare il nostro progettino scrivendo all'interno della prima casella il percorso della cartella Programmi (solitamente C:\Programmi) e premendo il pulsante Converti, ottenendo il corrispondente nome DOS (C:\PROGRA~1).

Conoscendo il corretto funzionamento e comportamento delle funzioni API questo genere di operazioni si effettua ad occhi chiusi, poiché non richiede nessun accorgimento particolare, oltre a quelli indicati nelle informazioni aggiuntive alle funzioni API.

Fibia FBI
18 Dicembre 2000

Scarica il progetto
Scarica il progetto
Scarica il testo dell'articolo
Scarica il testo dell'articolo
Stampa l'articolo
Stampa l'articolo
Torna all'indice degli HowTo