Newsgroup: it.comp.lang.visual-basic
Titolo: VB6 - CreateFolder - creare una nuova cartella nell'HD

VB6-SP6
Perdonate la mia ignoranza, vorrei chiedere quanto segue:
nell'effettuare il salvataggio di un file, intendo salvarlo nella cartella 
D:\ARCVB6\nome file.
Come fare in modo che in assenza della cartella questa sia creata senza dare 
errore, e qualora ci fosse gi�, non dia errore ?
Ho letto qualcosa su CreateFolder, ma come si usa ???
Grazie
giap



Si pu� fare con due API in modo semplice.
Prima con la GetFileAttributes() si verifica che la directory esista,
Const FILE_ATTRIBUTE_DIRECTORY = &H10 
poi se occorre si usa la CreateDirectory()
http://allapi.mentalis.org/apilist/GetFileAttributes.shtml
http://allapi.mentalis.org/apilist/CreateDirectory.shtml
--
ciao
  Stefano

 Si pu� fare con due API in modo semplice.
Senza scomodare le API, Dir e MkDir :-)
Bye, G.

Senza scomodare le API, Dir e MkDir :-)
Vero, ma io preferisco usare le API negli approcci con il s.o. o il f.s. perch�
in caso di errore non mi trovo dei runtime error che chiudono il programma ma al
massimo un Long nel valore di ritorno..
E' una cosa che risale ai tempi dei floppy, e mi pare che ne abbiamo gi�
parlato.
--
ciao
  Stefano

 massimo un Long nel valore di ritorno..
C'è un motivo per cui esiste l'istruzione On Error...

C'� un motivo per cui esiste l'istruzione On Error...
On Error ... Resume Next    :-)
La gestione degli errori � la cosa che mi piace di meno del VB classico.
--
ciao
  Stefano

Ringrazio tutti per l'aiuto.
Cordiali saluti.
giap

 in caso di errore non mi trovo dei runtime error
una cosa tipo
    If Dir$(sysPath, vbDirectory) = "" Then MkDir sysPath
fa brutto?
ciao :) 

 fa brutto?
Quello che dicevo anch'io, ma � da tener presente che l'errore
� sempre possibile, soprattutto negli accessi al disco, e gli errori
vanno *sempre*[1] gestiti. A prescindere dal fatto di usare
i comandi del VB o le API equivalenti.
Potresti essere un utente che ha i diritti in lettura, ma non in
scrittura, sulla catella superiore: la cartella risulta correttamente
assente, ma poi ti darebbe un errore in creazione.
Potresti star lavorando su un disco di rete attualmente disconnesso
o su un percorso UNC e, sia pure con motivi (e numeri di errore)
diversi, la situazione sarebbe quella di prima.
Potrebbe essere finito lo spazio su disco.
Potrebbe essersi perfino [SGRAT] guastato il disco.
[1] andrebbero O:-)
Un Paperino che predica bene e razzola malissimo. 


No, ma preferisco
If  GetFileAttributes(sysPath)  <> FILE_ATTRIBUTE_DIRECTORY then
    Ret& = CreateDirectory(sysPath(sysPath, 0&)
Endi If
che non � molto pi� lungo.
 Poi se voglio mettere una cosa come:
   If Ret& = 0 Then MsgBox "errore"
sono libero di farlo, ma almeno non ho strani errori di runtime da gestire e
soprattutto non vengo sbattuto fuori dal programma.
Naturalmente mi rendo conto che la mia visione non � ortodossa, ma tengo a
chiarire che ha una sua logica.
--
ciao
  Stefano

Endi If
--
ciao
  Stefano

 ha scritto nel messaggio 
news:0j0du5h7i7iqmmr2f...@4ax.com...

Occhio che GetFileAttributes ritorna una bitmap!
Il test corretto �:
If (GetFileAttributes(sysPath) And FILE_ATTRIBUTE_DIRECTORY) <> 0 Then
Metti anche solo che la cartella esista e sia nascosta...
Bye
Raf 

Metti anche solo che la cartella esista e sia nascosta...
Beh,  la directory la crea lui solo se non c'� gi�.
Poi se vuole pu� sempre testare
FILE_ATTRIBUTE_HIDDEN 
o
FILE_ATTRIBUTE_SYSTEM 
e cos� via.
--
ciao
  Stefano

 Direi che gli passi una Stringa e ritorna un Long.
Leggi pi� gi�... quel long � una bitmap non nel senso di immagine,
ma di maschera di bit.
Ogni bit ha un significato, cio� ti dice se uno o l'altro degli attributi
del file � attivo o meno, il fatto che siano per cos� dire "compressi"
in un singolo long � un altro discorso.
SE&O, questa � la lista che ho io:
FILE_ATTRIBUTE_READONLY = &H1
FILE_ATTRIBUTE_HIDDEN = &H2
FILE_ATTRIBUTE_SYSTEM = &H4
FILE_ATTRIBUTE_DIRECTORY = &H10
FILE_ATTRIBUTE_ARCHIVE = &H20
FILE_ATTRIBUTE_NORMAL = &H80
FILE_ATTRIBUTE_TEMPORARY = &H100
FILE_ATTRIBUTE_COMPRESSED = &H800
FILE_ATTRIBUTE_OFFLINE  = &H1000
Bye, G. 

FILE_ATTRIBUTE_OFFLINE  = &H1000
E' corretto, in effetti si deve fare l'AND per verificare il bit o i bits da
testare.
Io in genere controllo solo che GetFileAttributes() sia >0 perch� mi interessa
testare che il file esista prima di aprirlo, in caso di errore la funzione
ritorna  0xFFFFFFFF cioe -1.
Per verificare che sia una directory effetivamente occorre fare:
If (GetFileAttributes(sysPath) And FILE_ATTRIBUTE_DIRECTORY) <> 0 Then
ma pi� che bitmap questa la chiamerei bitmask.
--
ciao
  Stefano

 ma pi� che bitmap questa la chiamerei bitmask.
Il succo � quello, ci siamo capiti.
� forse meno usato, per� "bitmap" pu� anche indicare un bit array (che � il 
termine esatto):
http://en.wikipedia.org/wiki/Bit_array
Ciao
Raf
 

ritorna  0xFFFFFFFF cioe -1.
Anzi, ripensandoci, dal momento che torna 0FFFFFFFFH in caso di errore sarebbe
meglio fare:
Ret& = GetFileAttributes(sysPath$)
If ((Ret& > 0 ) And ( Ret&  And FILE_ATTRIBUTE_DIRECTORY > 0 ) Then 
...
--
ciao
  Stefano

