Newsgroup: it.comp.lang.visual-basic
Titolo: VB6: funzione per verifica nomi validi per directory

esiste una funzione che verifica se una stringa può essere un nome
valido
per directory (cartella).
esempio:
  dim A as string
  A = "pi::ppo"
  mkdir(A) ---> errore
grazie a tutti :-)

Potresti mettere tu un filtro che non consente la digitazione di
caratteri non validi.
Giuliano


 esiste una funzione che verifica se una stringa puň essere un nome


 Loop
Replace(Valore, ":", " ") ?
Anche questo è comunque un comportamento discutibile, e non tiene conto dei 
":" della root.
Ciao 



Potresti usare l'API  GetFileAttributes e verificare se il parametro che ti
ritorna è una cartella:
Declare Function GetFileAttributes Lib "kernel32.dll" Alias
"GetFileAttributesA" (ByVal lpFileName As String) As Long
'ESEMPIO:
If GetFileAttributes ("c:\documenti")  = FILE_ATTRIBUTE_DIRECTORY Then
Endif
_______________________________
La funzione GetFileAttributes consente di conoscere il tipo di file o
di una directory, ovvero se trattasi di file nascosti, di sola
lettura, di systema, di archivio ecc.
In caso di errore, la funzione ritorna 0, se invece il file di cui si
vuol conoscere il tipo non viene trovato la funzione ritorna -1.
Altrimenti il valore ritornato, sarà uno o più di uno dei seguenti
flags.
FILE_ATTRIBUTE_ARCHIVE = &H20 Un file di archivio (la maggior parte
dei files).
FILE_ATTRIBUTE_COMPRESSED = &H800 Un file in un drive o in una
directori compressa.
FILE_ATTRIBUTE_DIRECTORY = &H10 Una directory invece di un file.
FILE_ATTRIBUTE_HIDDEN = &H2 File nascosto.
FILE_ATTRIBUTE_NORMAL = &H80 File senza attributi.
FILE_ATTRIBUTE_READONLY = &H1 File di sola lettura.
FILE_ATTRIBUTE_SYSTEM = &H4 File di sistema (lo usa solo il sistema
operativo)
Il parametro lpFileName contiene il path completo, ed il nome del file
di cui si vuol conoscere gli attributi. 
--
ciao
  Stefano

ritorna è una cartella:
Scusa, non avevo letto bene, questa vale solo se la directory c'è già, non se la
devi creare.
--
ciao
  Stefano

Marco ha scritto:

Io uso questa per i nomifile, ma non l'ho molto testata
Function IsValidFileName(Stringa) As Boolean
'Controlla che un FileName sia valido
     Dim badChars As String
     badChars = "\/:*?<>|." & Chr(34) '34=virgolette
     Dim i As Long, Bad As Boolean
     If Stringa > "" And Len(Stringa) < 128 Then
         For i = 1 To Len(Stringa)
             If InStr(badChars, Mid$(Stringa, i, 1)) Then
                 Bad = True
             End If
         Next
         IsValidFileName = Not Bad
     End If
End Function

 End Function
Ciao

 conto dei ":" della root.
Ho riportato i ":" perchč li portava come esempio Marco, nella mia 
sinceramente non li ho riportati... e poi dipende cosa passi alla funzione, 
puoi anche non passarla root  :)
Tu come fai?
Ciao
Gian 

 Tu come fai?
Non ho mai avuto questa necessità e sinceramente non capisco a cosa possa 
servire.
Ciao 

 possa servire.
Nel mio caso è servito per creare delle cartelle in base a delle scelte 
effettuate dall'utente...da un'anagrafica clienti se non ricordo male, 
quindi con i nomi più vari.
Ciao
Gian 

 
Perfetto, grazie. Il punto e il 128 è un'aggiunta per esigenze in un mio software.
Vado a mettere subito Const ed Exit for
Daniele

 ricordo male, quindi con i nomi più vari.
Ah, ok, quindi tu verifichi solo che il nome di una cartella, senza l'intero 
percorso, sia valido.
Ma non capisco comunque a che serve: fai la MkDir e se fallisce il nome non 
è valido.
Anche perchè la MkDir può fallire anche per altri motivi.
Ciao 

 è valido.
In un'ottica puramente procedurale. Ma a volte non è detto che un evento 
Validate in una classe debba creare la cartella.
 > Anche perchè la MkDir può fallire anche per altri motivi.
 >
Giusto, e ancora grazie.
Daniele

 nome non è valido.
No, controlli tutto il path.
Il cliente chiedeva di creare dalla form degli ordini una cartella sul suo 
server con numero ordine e nome cliente,
quindi ad esempio l'ordine corrisponde al "60001" e il cliente "pippo(di 
pluto)" da creare sul server "\\server1", quindi non potevo solo controllare 
l'errore, ma anche "sistemare" il nome della cartella, quindi nell'esempio 
avrei creato "\\server1\60001-pippo di pluto " rimuovendo le parentesi
Ciao
Gian 

 pluto " rimuovendo le parentesi
Appunto.
La tua funzione va bene perchè NON controlla l'esattezza del percorso 
passato, ma si limita a sistemare la stringa secondo le tue esigenze.
Ciao 

 evento Validate in una classe debba creare la cartella.
Ad esempio?
Se non deve fare operazioni su una cartella a che serve sapere se una 
stringa è un percorso valido?
Ciao 

 Ad esempio?
Nel mio caso:
L'utente digita la stringa in un oggetto (che la valida tramite l'evento 
Validate), e viene esposta come proprietà. Sarà poi il chiamante (forse) che 
avrà necessità di crearci una cartella.
Non è che faccio tutto sto casino solo per validare l'eventuale cartella, quella 
è solo una proprietà come tutte le altre.
Ciao,
Daniele

 chiamante (forse) che avrà necessità di crearci una cartella.
Giusto, e il chiamante valuterà il da farsi.
Ciao 

 passato, ma si limita a sistemare la stringa secondo le tue esigenze.
Infatti, mai parlato di altro, mi sa che Marco richiedeva quello...
Il pezzo di funzione che ho postato ha lo scopo di rimuovere i caratteri non 
accettati nel creare cartelle e restituire un path "formattata".
Non controlla ne se un path esiste, ne se l'utente ha le credenzialità e 
tutta la serie di errori che si possono generare creando una cartelle.
Ciao
Gian

 creando una cartelle.
Vabbeh, non ci capiamo.
Verificare che la stringa sia un percorso valido non c'entra niente con 
l'interazione con il file system.
Ne c'entra con il formattare una stringa secondo le esigenze personali di 
ognuno.
Ciao