Newsgroup: it.comp.lang.visual-basic
Titolo: Dir$ che dà problemi?

Utilizzo le due funzioni qui sotto per verificare se un file esiste, e per
ricavare il percorso di esecuzione dell'applicativo.
 Private Function FILE_ESISTE(ByVal Percorso_e_Nome_File As String) As
Boolean
    On Error Resume Next
    If Trim$(Dir$(Percorso_e_Nome_File)) = vbNullString Then
        FILE_ESISTE = False
    Else
        FILE_ESISTE = True
    End If
End Function
Public Function AppPath() As String
    AppPath = App.Path
    If Right$(AppPath, 1) = "\" Then AppPath = Left$(AppPath, Len(AppPath) -
1)
End Function
Su un PC con WXP_Home SP1 (ma non su altri con analogo S.O.), il test qui
sotto restituisce sempre FALSE, anche quando il file in realtà esiste.
If FILE_ESISTE(AppPath() & "\debug.txt") Then
Mi chiedo se qualcuno sia a conoscenza di sfighe strane, tipo
case_sensitive, problemi con percorsi con spazi o nomi lunghi, che possa far
fallire quanto sopra.
Ciao
Alberto
--
Santo cielo, Magnum, si può sapere cos'è questo baccano?
Higgins, posso spiegarle...
Credo non sia necessario.
Zeus, Apollo, a voi...

 possa far fallire quanto sopra.
Se non sbaglio non sei l'unico che ha avuto problemi con Dir e Xp, ho
ravanato in GoogleGroups ma nulla mi e' saltato agli occhi ! Spiace !
-- 
-Gigio@Work(?)-


Si, avevo già visto che App.Path, in XP, può restituire il backslash finale
anche per percorsi non root, ma nel mio codice questo sarebbe ininfluente,
visto che testo sempre l'ultimo carattere per intercettare eventuali
installazioni in root (vedi la funzione AppPath nel codice postato).
Da altri post, ho visto che altri hanno avuto effettivamente problemi non
meglio specificati con la Dir$, sotto XP e con dischi NTFS, ma i thread non
portavano a niente.
L'alternativa sarebbe quindi di utilizzare FileSystemObject, ma siccome
l'applicativo deve funzionare anche su sistemi senza IE4 o superiori, non
posso prendere questa strada.
Ciao
Alberto

A parte il fatto che l'uso di vbNullString č ben diverso da "".
VB, che č buono (si fa per dire) di natura, con le sue conversioni ci 
semplifica la vita... ma vbNullString in genere č diverso da "".
Comunque, prova a usare
If Dir$(Percorso, vbHidden Or vbReadOnly Or vbSystem) = "" Then
    Esiste = False
Else
    Esiste = True
End If
-- 
Quando noi ignoranti eravamo di piů,
tutto era piů bello...
(A. Celentano)

 ricavare il percorso di esecuzione dell'applicativo.
[...]
Non saprei dirti per quale motivo la cosa non funziona, ma io uso questa
funzione, più o meno scopiazzata da codice ufficiale di mamma Microsoft:
Private Declare Function GetFileAttributes Lib "kernel32" Alias _
"GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Const FILE_ATTRIBUTE_ARCHIVE = &H20
Private Const FILE_ATTRIBUTE_COMPRESSED = &H800
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Private Const FILE_ATTRIBUTE_HIDDEN = &H2
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const FILE_ATTRIBUTE_READONLY = &H1
Private Const FILE_ATTRIBUTE_SYSTEM = &H4
Private Const FILE_ATTRIBUTE_INVALID    As Long = -1&
Public Function EsisteFile(Path As String) As Boolean
Dim Attr As Long
Attr = GetFileAttributes(Path)
If (Attr And FILE_ATTRIBUTE_DIRECTORY) > 0 Then
    EsisteFile = False
    Exit Function
End If
If Attr <> -1 Then
   EsisteFile = True
Else
   EsisteFile = False
End If
End Function
termoPilucco
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it