Newsgroup: it.comp.lang.visual-basic
Titolo: Cancellare una directory

Ciao a tutti,
da qualche giorno mi sono avvicinato al mondo di Visual Basic, volendo
imparare un nuovo linguaggio di programmazione ma mi sono già scontrato in
un problema che non riesco a risolvere: ho la necessità di cancellare una
directory di cui so il percorso. Ho provato con l'istruzione rmdir ma mi
genera un errore (Autorizzazione negata), ho provato inserendo queste due
istruzioni:
Set fs = CreateObject("Scripting.FileSystemObject")
    fs.deletefolder "E:\prova", True
ma il risultato è lo stesso. Aggiungo che la directory che voglio cancellare
è vuota e che è su una partizione FAT32 quindi non posso settare particolari
permessi di accesso.
Grazie a chiunque avrà la cortesia di rispondermi.

 directory di cui so il percorso.
Prova come di seguito.
 Dim oFSys As New Scripting.FileSystemObject
    oFSys.DeleteFolder "d:\prova", True
giuseppeD

 ha scritto nel messaggio
news:zRQ29.181627$vm5.5...@news2.tin.it...


 definito dall'utente non definito").
Ovviamente devi mettere il riferimento al Microsoft Scripting Runtime.
Ma è esattamente la stessa cosa che facevi tu (in realtà più performante
poichè usa l'early binding anzichè il late binding).
Comunque se hai i permessi e la dir è vuota basta un RmDir <path>
Ciao

"Leo"
*.vbs ( adattala)
'Questo cancella la Folder A in C:\windows\temp
'solo se e' completamente vuota altrimenti la lascia
DeleteIfEmpty "C:\windows\temp\A"
Function DeleteIfEmpty(sFldr)
 Set FSO = CreateObject("Scripting.FileSystemObject")
 Set Fldr = FSO.GetFolder(sFldr)
 HasFiles = CBool(Fldr.Files.Count)
 HasFlders = CBool(Fldr.SubFolders.Count)
 If ( (HasFiles = False) AND (HasFlders = False) ) Then
  FSO.DeleteFolder sFldr
Else
Msgbox"Folder non VUOTA"
 End If
End Function
--
Fosco

Ok. Vi ringrazio tutti ma il problema rimane: cancellando una cartella vuota
con i vostri metodi tutto funziona, ma se la cartella non è vuota mi
compaiono diversi errori a seconda del metodo. Ho provato a cancellare tutti
i file all'interno della direcory con l'istruzione kill (che funziona
perfettamente) ma quando vado a cancellare la directory mi viene generato
l'errore. Smanettando un po' mi sono accorto che dopo aver utilizzato
l'istruzione kill neanche il sistema operativo è in grado di cancellare la
directory dicendomi che la cartella è in uso da un altro processo. A questo
punto se chiudo Visual Basic sono in grado di cancellare la directory anche
dal sistema operativo. Credo quindi che sia Kill a dare dei problemi. Avete
qualche idea?
Grazie ancora a chi mi sta aiutando!

 ha scritto nel messaggio
news:jW639.165246$Jj7.3...@news1.tin.it...


 ha scritto nel messaggio
news:FH839.34471$n04.9...@twister2.libero.it...


 Se invece eseguo RmDir su una casella vuota funziona.
Veramente tutto l'assioma si basava sulla tua premessa iniziale:
<citazione>
Aggiungo che la directory che voglio cancellare č vuota
</citazione>
Ovvio che se *NON* č vuota, come dice chiaramente anche l'help, devi trovare
strade diverse: rimozione ricorsiva di files e direcory contenute.
Ciao

 Ovvio che se *NON* è vuota, come dice chiaramente anche l'help, devi


 Chiedo scusa a tutti.
Mai provato ma
1) puoi provare con la SHFileOperation (shell32.dll), ma piuttosto complessa
(più da spiegare che da usare e sicuramente si trovano esempi da qualche
parte, credo anche su 
www.allapi.net
) e non so se si può evitare di vedere
la tipica progressbar di windows mentre lavora sui files.
2) cancella così (scrivo al volo senza testare)
Sub CancellaDir(byval path_da_cancellare as string)
    s = dir(path_da cancellare, parametri per tutti i files e directory)
    do while not s <> ""
        if asc(s) <> Asc(".") then
            ' o è un file o è una dir
            if ((getattr(s) AND vbdirectory) <> 0)then
                ' se è una dir tento di cancellarne il contenuto
                call cancelladir(path_da_cancellare & s)
            else
                ' se è un file lo cancello
                kill path_da_cancellare & s
            endif
        endif
    loop
End Sub
Ciao

>>>>Aggiungo che la directory che voglio cancellar e' vuota<<<<<
Se poi cambi idea strada facendo avverti ....
--
Fosco