Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
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. Svilupperemo
subito un semplice progettino: inseriamo all'interno di un form due TextBox
di nome FileLungo e FileDOS. Inseriamo anche un pulsante
di nome Converti. All'interno della finestra del codice scriviamo:
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. 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.
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. 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. Possiamo
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
|
Torna all'indice degli HowTo |