Newsgroup: it.comp.lang.visual-basic
Titolo: [API] GetShortPathName, GetFullPathName

Chi ha letto il mio messaggio riguardo il fatto che CurrentDb restituisce a
volte il nome lungo e a volte il nome corto (8.3) puo` immaginare perche`
sia andato a cercare e studiare questa API.
(N.B. In realta` restituisce un ibrido in quanto restituisce il percorso in
formato 8.3 ma il nome file in formato nomelungo.)
Sono andato a guardarmi anche GetFullPathName sperando che facesse la
conversione opposta ma non e` cosi`.
Sembra non fare altro che una concatenazione di stringhe del tipo:
CurDir & "\" & nomefile
e quindi non ne capisco l'utilita`.
Nulla e` farina del mio sacco, a parte le prove, e le fonti sono indirizzi
di doc sulle API che sono piu` volte gia` apparsi sul NG.
Vi segnalo cmq che la versione che trovate qui
http://skyscraper.fortunecity.com/transmission/45/api/g/getshortpathname.html
contiene un errore (manca il ByVal sulla seconda variabile) che se non
viene corretto silura il kernel.
 
'GetShortPathName Function
'-------------------------
Private Declare Function GetShortPathName Lib "kernel32.dll" Alias _
 "GetShortPathNameA" (ByVal lpszLongPath As String, _
                      ByVal lpszShortPath As String, _
                      ByVal cchBuffer As Long) As Long
' Dichiarata per le piattaforme: Win 32s, Win 95/98, Win NT
' GetShortPathName converte i nomi dei files completi di percorso dal
formato nomi-lunghi
' al formato nome-corto (old-style 8.3)
' Il nome-corto e messo nella variabile stringa lpShortPath.
' La funzione restituisce la lunghezza della stringa o 0 se la funzione va
in errore
' lpszLongPath
' Il nome-lungo completo di percorso da convertire
' lpszShortPath
' La stringa in cui viene restituito il nome-corto equivalente
' cchBuffer
' La lunghezza in caratteri della stringa restituita in lpszShortPath.
Function ConvToShortName(LongName As String) As String
  Dim slength As Long         ' lunghezza della stringa short-filename
  Dim ShortName As String     ' variabile per l'equivalente short-filename
  ShortName = String$(255, 0) ' riserva lo spazio in un buffer per
short-filename
  slength = GetShortPathName(LongName, ShortName, 254)
  If slength Then
    ShortName = Left$(ShortName, slength)  ' estrae la stringa dal buffer
  End If
  ConvToShortName = ShortName
End Function
'GetFullPathName Function
'-------------------------
Private Declare Function GetFullPathName Lib "kernel32.dll" Alias _
 "GetFullPathNameA" (ByVal lpFileName As String, _
                     ByVal nBufferLength As Long, _
                     ByVal lpBuffer As String, _
                     ByVal lpFilePart As String) As Long
' Dichiarata per le piattaforme: Win 32s, Win 95/98, Win NT
' GetFullPathName restituisce lpBuffer il nomefile passato in lpFileName
completo
' di percorso e il percorso usato e` quello corrente
' La funzione restituisce in nBufferLenght la lunghezza della stringa o 0
se la
' funzione va in errore
' lpFileName
' Il nome del file
' nBufferLength
' La lunghezza della stringa restituita in lpBuffer.
' lpBuffer
' La stringa contenente il nome del file completo di percorso
' lpFilePart
' ???
--
Ciao,
      Peppo
 
ICQ    : UIN 5709387
Fidonet: 2:331/301.45


Per ricercare il nome lungo di un file puoi utilizzare l'API FindFirstFile
Ciao Bruno

Per ricercare il nome lungo di un file puoi utilizzare l'API FindFirstFile
Quando ho postato il messaggio non avevo ancora visto proprio un esempio al
riguardo, anche se poi ho preferito la soluzione di un certo Pasquale (mio
thread CurrentDB) che usa solo la funzione Dir.
