Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: bonmario - Agosto 13, 2026, 02:17:39 pm

Titolo: Comportamento "strano" di DeleteDirectory
Inserito da: bonmario - Agosto 13, 2026, 02:17:39 pm
Ciao,
mi sono reso conto oggi si un comportamento strano, almeno per me, di DeleteDirectory (unit Fileutil).
Al momento l'ho verificato solo su Windows

Succede questo: lo lancio per una directory in cui ci sono qualche centinaio tra files e directories. Uno solo di questi files è vincolato da un altro programma, e quindi non può essere cancellato. DeleteDirectory fa un ciclo e, per ogni file trovato all'interno del percorso, ne tenta la cancellazione. Se la cancellazione del file non riesce, si interrompe lì ed esce segnalando al chiamante che la cancellazione della directory non è andata a buon fine.

Quindi, se ci sono 500 files, di cui uno non cancellabile, e questo è il decimo di cui tenta la cancellazione, mi troverò con 491 files ancora presenti.

Per come la vedo io, sarebbe stato più corretto cancellare anche gli altri files e directories cancellabili, ed alla fine segnalare al chiamante che c'era stato un errore.
Sapete se c'è già qualche procedura/funzione che si comporta in questa maniera, oppure devo farmela io?

Grazie, Mario
Titolo: Re:Comportamento "strano" di DeleteDirectory
Inserito da: DragoRosso - Agosto 13, 2026, 05:07:07 pm
Quello che hai riportato è il normale comportamento di Windows attraverso la cancellazione di una directory, in windows penso venga usa la shell -> equivalente al comando RMDIR del prompt dei comandi.

Però, non tantissimo tempo fà ho fatto una cosa simile dal normale prompt (non powershell) ma mi pareva che aveva cancellato tutto eccetto i file bloccati (e le relative directory ovviamente). Potrei sbagliarmi comunque.

Io non eseguo cancellazioni di massa mai, e quando le eseguo verifico ogni singolo file eseguendo l'"erase" singolarmente (per tendenzialmente devo cancellare file legati a particolari condizioni, come data, grandezza, tipo, ....).






Titolo: Re:Comportamento "strano" di DeleteDirectory
Inserito da: bonmario - Agosto 15, 2026, 07:56:40 am
La faccio breve: devo cancellare la directory che contiene i files della cache di un programma.
I files che gli servono veramente li tiene vincolati, tutti gli altri, quasi sempre di giorni precedenti, no e quindi sono cancellabili.
Spesso mi capitava che il primo file che "DeleteDirectory" cercava di cancellare era vincolato, e quindi si bloccava lì, non cancellando nemmeno un file !
Titolo: Re:Comportamento "strano" di DeleteDirectory
Inserito da: DragoRosso - Agosto 15, 2026, 03:11:43 pm
Codice: [Seleziona]
Uses FileUtil;
procedure REMOVEALLFILES_FAIATTENZIONE;
var
  SearchResults: TStringList;
  FileDaCancellare: string;
begin
  SearchResults := FindAllFiles('\DirectorydaCancellare', '*.*', True);
  try
    if SearchResults.Count > 0 then
      for FileDaCancellare in SearchResults do
        DeleteFile(FileDaCancellare);
  finally
    SearchResults.Free;
  end;
end;
Titolo: Re:Comportamento "strano" di DeleteDirectory
Inserito da: bonmario - Agosto 15, 2026, 07:28:55 pm
Sì sì, grazie, sapevo già come fare ... chiedevo se c'era qualcosa di già pronto per non reinventarmi l'acqua calda !!