Newsgroup: it.comp.programmare.win32
Titolo: RemoveDirectory

Forse stasera non č la mia serata migliore per la programmazione.
Per quale ragione una direcotry vuota puň essere impossibile da
rimuovere (mentre da explorer la rimuovo senza problemi)?
GetLastError mi ritorna 16 che indovinate... significa "Impossibile
rimuovere la directory." peccato che fino a qui ci arrivavo anch'io.
-- 
Marco Barisione (ICQ 84277092)

rimuovere (mentre da explorer la rimuovo senza problemi)?
Io rimuovo senza problemi sia da explorer, sia da programma.
Ho creato una directory vuota chiamata "DirectoryVuota"
sotto C:\ e la cancello, da C++ Builder con:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    if (RemoveDirectory("C:\\DirectoryVuota"))
      ShowMessage("Cancellazione OK");
    else
      ShowMessage("Impossibile cancellare !");
}
Il codice mi da' "Cancellazione OK" e la directory viene
effettivamente rimossa.
-- 
The Follet

Io rimuovo senza problemi sia da explorer, sia da programma.
Non è una cosa che mi capita sempre ma solo in alcuni casi, spiego
meglio il mio problema. Ho realizzato il programma che qualcuno sul ng
chiedeva per trasformare pagine html in exe utilizzando una libreria
di scompattazione dei file .zip della InfoZip.
Per lanciare i file presenti nell'archivio scompatto tutto in una
directory creata nella directory temporanea. Al termine
dell'applicazione tutti i file vengono rimossi senza problemi. Se
invece per qualche motivo la scompattazione non va a buon fine tento
di rimuovere la directory temporanea ma RemoveDirectory non va anche
se la cartella è vuota e con Explorer viene cancellata senza problemi.
Non ho la minima idea di cosa possa essere.


se la cartella è vuota
Sei sicuro che la cartella sia realmente vuota ?
Secondo me rimane qualche file (probabilmente nascosto).
-- 
The Follet

Secondo me rimane qualche file (probabilmente nascosto).
Certo uso Windows Commander e non Explorer con cui visualizzo tutti i
file compresi quelli di sistema e nascosti ma la cartella è vuota e da
Windows Commander la cancello senza problemi (se non fosse vuota mi
chiederebbe se sono sicuro di cancellarla perché ci sono dei file
dentro).


 dentro).
utilizzi qualche componente per l'apertura della cartella? (tipo DirListBox
di VCL o simile?)
E' possibile che sia quello ad impedire operazioni di scrittura sulla
cartella quando è selezionata.
Ciao
--
- Carlo -
c.b...@libero.it

cartella quando č selezionata.
No, l'unica cosa che uso č una libreria esterna per scompattare i file
zip, č possibile (anche se non penso) che sia questa a bloccare in
qualche modo la cancellazione della directory? Se sě come puň fare?


qualche modo la cancellazione della directory? Se sì come può fare?
Se tu apri un file contenuto in una cartella e cerchi di
cancellare la cartella mentre lo tieni aperto, Windows te lo
impedisce, perche' il file (e quindi la cartella in cui e'
contenuto) e' in uso.
Basta, cioe', tenere un file aperto.
-- 
The Follet

Basta, cioe', tenere un file aperto.
Appunto non c'è nessun file dentro!
Ho fatto ancora un po' di prove, allora io scompatto il file nella
directory "c:\_q\prova" la scompattazione fallisce quindi chiamo
RemoveDirectory("c:\\_q\\prova") ma la funzione fallisce, se invece
faccio partire il programma seguente tutto funziona normalmente:
#include <windows>
int main(){RemoveDirectory("c:\\_q\\prova");}
Non riesco proprio a capire il perché la directory è vuota e risulta
impossibile da cancellare solo dal mio programma.
Ecco il mio programma che non funziona ridotto al minimo:
#include <windows>
#include "sfx.h"
int main(){
    if (!scompatta("c:\\_q\\prova"))
         RemoveDirectory("c:\\_q\\prova"); // breakpoint
}
Dove ho scritto "breakpoint" fermo l'esecuzione del codice, se lascio
continuare il mio programma la directory non viene cancellata se
invece faccio partire l'altro programma che ho ripostato all'inizio
del messaggio la directory viene cancellata.


 }
prova a mettere uno Sleep() prima di RemoveDirectory ...
Faber

prova a mettere uno Sleep() prima di RemoveDirectory ...
Già fatto :-(


 Già fatto :-(
visto che non trovi proprio soluzione prova (tanto tentativo + tentativo -)
ad utilizzare SHFileOperation() per la rimozione della cartella ...


ad utilizzare SHFileOperation() per la rimozione della cartella ...
Sì ho già provato e infatti funziona ma continuo ad domandarmi perché
non può cancellare la directory con RemoveDirectory?


 rimuovere la directory." peccato che fino a qui ci arrivavo anch'io.
Per caso quella che stai cancellando è anche la directory di lavoro del 
programma? perchè a quella hai un handle, e se non lo chiudi (cioè cambi 
directory) la directory non è eliminabile
-- 
Nato nel vizio, morto nel supplizio
Nato nel peccato, ad entrare sia invitato

directory) la directory non č eliminabile
Sě č vero non ci avevo pensato anche perché io non ho impostato quella
come directory di lavoro ma probabilmente lo fa la libreria (cosa IMO
sbagliatissima perché potrebbe creare diversi problemi).
Ma perché non si puň cancellare la cartella corrente mentre si puň
cancellare da un altro programma?


...

Se ci pensi bene quando provi ad eliminare un cartella da esplora risorse
non puoi eliminare quella corrente perchč . . . ci sei dentro !!
Grazie a te ed ad Andrč forse ho risolto mezzo problema.
Neo